flask - 如何在 Jinja2 中传递 block 以包含语句

标签 flask jinja2

我需要将 block 从基本模板传递到包含上下文的模板,但不想
该 block 在基本模板中的重叠。 例如,我有几个模板

header.html

<header>
    <title>{% block title %}{% endblock %}</title>
</header>

body1.html

{% include   "test_header.html" ignore missing with context %}
{% block title %}Title1{% endblock %}
<body>
    Hello
</body>

body2.html

{% include   "test_header.html" ignore missing with context %}
{% block title %}Title2{% endblock %}
<body>
    Hello
</body>

当我尝试渲染 body1.html 时,页面标题重命名为“Title1”,但 block 标题渲染两次并在正文中显示 Title1。我如何才能准确地为 include 语句传递此上下文?

最佳答案

包含标题等动态内容的方法通常是 {{ ... }},而 {% ... %} 用于控制语句(for 循环、if 语句、 block 等)。您可以构建如下所示的特定模板:

base.html

<html>
<head>
    <title>{{title}}</title>
</head>
<body>
    {% block body %}{% endblock %}
</body>
</html>

正如 @alecxe 所说,您应该 extends脱离基本模板。

body1.html

{% extends "base.html" %}

{% block body %}
Hello!
{% endblock %}

body2.html

{% extends "base.html" %}

{% block body %}
Hi!
{% endblock %}

标题应通过 render_template() 传递给模板在 View 中。

view.py 摘录

@app.route('/body1')
def body1():
    title = "Body 1 Title"
    return render_template("body1.html", title = title)

@app.route('/body2')
def body2():
    title = "Body 2 Title"
    return render_template("body2.html", title = title)

如果您非常想改变模板之间的标题,您也可以替换 <title>{{title}}</title>{% block header %}{% endblock %}base.html 。您的body1.html然后看起来像这样:

{% extends "base.html" %}

{% block header %}
<title>{{title}}</title>
{% endblock %}

{% block body %}
Hello!
{% endblock %}

关于flask - 如何在 Jinja2 中传递 block 以包含语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18374576/

相关文章:

python - Flask:忽略 'category' 参数的 Flash 函数

python - 如何使用 anchor 标记在 Tornado 中从一个 html 导航到另一个

python - Flask-admin 如何在行旁边添加按钮

python - Flask 在 Windows 上运行时无法识别 python-dotenv

python - TypeError : jsonify() argument after ** must be a mapping, 未列出使用 Flask 返回的 JSON

python - 无法在 Heroku 上使用 Flask 上传文件

python - 从 Jinja2 模板访问操作系统环境变量

python - 如何在 Flask 中返回图像作为 GET 请求响应的一部分?

python - 使用带有 GAE 和 Jinja2 的 WTForms,当字段无效时如何获得红色边框?

python - 使用 jinja 动态设置 href 属性