3

Pythonを使用して(herokuを使用して)Webサイトを構築しており、「最新の送信」セクションを作成したいと思います。つまり@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_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>
于 2012-10-31T15:39:13.883 に答える