Flaskアプリでは、投稿を表示するビューがあります
@post_blueprint.route('/post/<int:year>/<int:month>/<title>')
def get_post(year,month,title):
# My code
最後の10エントリを表示するには、次のビューがあります。
@post_blueprint.route('/posts/')
def get_all_posts():
# My code
return render_template('p.html',posts=posts)
ここで、最後の10件の投稿を表示するときに、投稿のタイトルをハイパーリンクに変換します。現在、これを実現するには、jinjaテンプレートで次のことを行う必要があります。
<a href="/post/{{year}}/{{month}}/{{title}}">{{title}}</a>
URLのハードコーディングを回避する方法はありますか?
url_for
FlaskこのようなURLを作成するために使用される関数:
url_for('view_name',**arguments)
探してみましたが、見つけられません。
ここで2つの質問をしているように感じますが、ショットを撮ります...
投稿URLについては、次のようにします。
<a href="{{ url_for('post_blueprint.get_post', year=year, month=month, title=title)}}">
{{ title }}
</a>
静的ファイルを処理するには、 Flask-Assets のようなアセットマネージャーを使用することを強くお勧めしますが、Vanilla flaskを使用して行うことをお勧めします。
{{ url_for('static', filename='[filenameofstaticfile]') }}
さらに情報が必要な場合は、お読みになることを強くお勧めします。 http://flask.pocoo.org/docs/quickstart/#static-files および http://flask.pocoo.org/docs/quickstart/#url-building =
kwargsを使用するための編集:
もっと徹底的だと思っただけ...
url_for
を次のように使用する場合:
{{ url_for('post_blueprint.get_post', **post) }}
ビューを次のように変更する必要があります。
@post_blueprint.route('/posts/')
def get_all_posts():
models = database_call_of_some_kind # This is assuming you use some kind of model
posts = []
for model in models:
posts.append(dict(year=model.year, month=model.month, title=model.title))
return render_template('p.html', posts=posts)
テンプレートコードは次のようになります。
{% for post in posts %}
<a href="{{ url_for('post_blueprint.get_post', **post) }}">
{{ post['title'] }}
</a>
{% endfor %}
この時点で、モデルにメソッドを実際に作成するので、それを辞書に変換する必要はありませんが、そこまで行くのはあなた次第です:-)。