我需要将块从基本模板传递到包含上下文的模板,但不要求 在基本模板中重叠这些块。 例如,我有几个模板
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语句传递这个上下文?
答案 0 :(得分: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 %}
中的base.html
。您的body1.html
可能如下所示:
{% extends "base.html" %}
{% block header %}
<title>{{title}}</title>
{% endblock %}
{% block body %}
Hello!
{% endblock %}