2012-10-31 74 views
3

我正在用Python构建一个网站(使用heroku),我想创建一个“最新的提交”部分。也就是说,当我在我的Python应用程序中创建一个新的@app.route(blah)时,我想要一个到新页面的链接,显示在我的主页上的“最新提交”部分下。显示创建新网页的链接

这可能吗?

编辑:这里是我的代码

import os 
import json 
from flask import Flask, render_template, url_for 
from werkzeug.routing import Map, Rule, NotFound, RequestRedirect, BaseConverter 

app = Flask(__name__) 


@app.route('/') 
def index(): 
    return render_template('welcome.html') 

@app.route('/about', endpoint='about') 
def index(): 
    return render_template('about.html') 

@app.route('/contact', endpoint='contact') 
def index(): 
    return render_template('contact.html') 

@app.route('/all-links', endpoint='all-links') 
def all_links(): 
    links = [] 
    for rule in app.url_map.iter_rules(): 
     url = url_for(rule.endpoint) 
     links.append((url, rule.endpoint)) 
    return render_template('all_links.html', links=links) 



if __name__ == '__main__': 
    # Bind to PORT if defined, otherwise default to 5000. 
    port = int(os.environ.get('PORT', 5000)) 
    app.run(host='0.0.0.0', port=port) 

和所有的应用程序的路线都存储在app.url_map的all_links.html文件

<!DOCTYPE HTML> 
<html lang="en"> 
    <head> 
     <title>links</title> 
    </head> 
    <body> 
     <ul> 
      {% for url, endpoint in links %} 
      <li><a href="{{ url }}">{{ endpoint }}</a></li> 
      {% endfor %} 
     </ul>  
    </body> 
</html> 
+1

'这是可能的'有?如果你发布了一些你已经尝试过的代码,你可能会得到更好的回应。 – John

+0

在这一点上,我正在寻找更多的方向,而不是实际的“这是答案”的答案。我可以在烧瓶中完全做到这一点吗?我的主要app.py文件中是否使用了python编码和烧瓶编码的组合? –

+0

Flask *是Python ;-) –

回答

7

这是werkzeug.routing.Map一个实例。话虽这么说,你可以通过使用iter_rules方法在Rule实例迭代:

from flask import Flask, render_template, url_for 

app = Flask(__name__) 

@app.route("/all-links") 
def all_links(): 
    links = [] 
    for rule in app.url_map.iter_rules(): 
     if len(rule.defaults) >= len(rule.arguments): 
      url = url_for(rule.endpoint, **(rule.defaults or {})) 
      links.append((url, rule.endpoint)) 
    return render_template("all_links.html", links=links) 

 

{# all_links.html #} 
<ul> 
{% for url, endpoint in links %} 
<li><a href="{{ url }}">{{ endpoint }}</a></li> 
{% endfor %} 
</ul> 
+0

因此,您发布的代码中的for循环会将app.url_map中的所有路由都放入链接列表中。但render_template(“all_links.html”,links = links)的意义何在?这不是因为当有人去那里时,位于herokuapp.com/all-links的某个页面返回all_links.html吗? –

+0

@CrossGameChat - 最后一行只是一个例子 - 我将为'all_links'模板添加一个Jinja模板示例。 –

+0

非常感谢您的帮助!我仍然收到500内部服务器错误“服务器遇到内部错误,无法完成您的请求。服务器过载或应用程序出现错误。”我用我的app.py和all_links.html的代码更新了这篇文章 –

相关问题