2

我需要将块从基本模板传递到包含上下文的模板,但不希望
这些块在基本模板中重叠。例如,我有几个模板

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”,但块标题呈现两次并在正文中显示 Title1。我如何才能将这个上下文准确地传递给 include 语句?

4

1 回答 1

2

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

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.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 %}in base.html。你body1.html可能看起来像这样:

{% extends "base.html" %}

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

{% block body %}
Hello!
{% endblock %}
于 2013-08-22T09:31:34.983 回答