3

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

这可能吗?

编辑:这是我的代码

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>
4

1 回答 1

9

应用程序的所有路由都存储app.url_mapwerkzeug.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>
于 2012-10-31T15:39:13.883 回答