显示创建的新网页的链接

时间:2012-10-31 04:11:33

标签: python heroku flask

我正在使用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)

和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 个答案:

答案 0 :(得分:8)

应用程序的所有路由都存储在app.url_map werkzeug.routing.Map的实例上。话虽这么说,您可以使用Rule方法迭代iter_rules个实例:

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>