这是我的base.html:
<html>
<head>
{% block head %}
{% endblock %}
</head>
<body>
{% block body %}
{% endblock %}
</body>
</html>
这是我的meta.html:
{% extends 'templates/base.html' %}
{% block head %}
{% if page == 'index' %}
<meta name="mysite.com" content="{{page}}"></meta>
{% else %}
<meta name="mysite.com" content="other page"></meta>
{% endblock %}
这是我的index.html:
{% extends 'templates/base.html' %}
{% block body %}
......
{% endblock %}
这是我的观点:
@view_config(route_name='index', renderer='templates/index.html', permission='view')
def index(request):
return dict(page="index")
扩展正文,但元标记根本没有显示。我做错了什么?
答案 0 :(得分:5)
根据extends
上的Jinja2 documentation,&#34; extends标记可用于从另一个扩展模板。您可以在文件中包含多个,但只有一个可以在时执行。&#34;
从视图中加载index.html
时,模板引擎会评估index.html
。它在{% extends 'templates/base.html' %}
中看到index.html
,并使用index.html
中的块替换父/扩展模板(base.html
)的同名块。
所以index.html
表示要使用base.html
作为框架模板,而是将父{% block body %}
}中的base.html
替换为自己的{% block body %}
。< / p>
此指令中没有任何地方(base.html
,index.html
或视图代码)都没有提及meta.html
。模板引擎不分析目录结构中的所有模板,以查看它如何插入内容。它只使用您的显式指令。
要明确使用meta.html
,您可以使用include
中的base.html
指令(文档here)。您的base.html
将如下所示:
<html>
<head>
{% include 'templates/meta.html' %}
{% block head %}
{% endblock %}
</head>
<body>
{% block body %}
{% endblock %}
</body>
</html>
这将引入meta.html
并将骨架的同名块(base.html
)替换为从包含模板中检索到的块{{1} }})。
此外,meta.html
中的extends
语句需要删除,因此它不会创建循环模板包含。