如何将变量传递到未渲染的Jinja模板?

时间:2018-10-16 00:47:55

标签: flask jinja2

我正在为一本包含很多章节的书编写一个烧瓶应用程序。在索引页面上,我具有每个章节的链接,分别为:<a href="/chapters/{{ chapter }}">{{ chapter }}</a>。我呈现每章的功能是:

@app.route("/chapters/<chapter>")
def chapter(chapter):
    return render_template(f"chapters/{chapter}.html", chapter=chapter)

我将本章和文本的布局分开。因此,我的chapter.html包含布局,并为实际内容提供了一个块:

{% include "layout.html" %}

{% block chapter %}{% endblock %}
...

虽然chapter-1.html之类的内容扩展了chapter.html并包含该书的实际文本。但是现在我想在chapter.html上有一些按钮,使用户可以转到上一章/下一章。我有办法将chapter变量从函数传递到模板chapter.html而不进行渲染吗?

1 个答案:

答案 0 :(得分:1)

@app.route("/chapters/<chapter>")
def chapter(chapter):
    session['chapter'] = chapter
    return render_template(f"chapters/{chapter}.html", chapter=chapter)

使用CSS设置<a>标记的样式,使其看起来像button并将该章存储在sessions中。

<a href="{{ url_for( 'chapter', chapter=session['chapter'] - 1) }}" class="button-style">Previuos</a>

以及下一章:

<a href="{{ url_for( 'chapter', chapter=session['chapter'] + 1) }}" class="button-style">Next</a>

如果您的章节值为字符串,请使用chapter=int(session['chapter'])