使用Jinja2,是否需要在所有其他模板扩展的基础模板中定义所有块?例如,给定以下模板:
<-- ultra_base.j2 -->
<head>
</head>
<body>
{% block content %}{% endblock %}
{% block extra_js %} {% endblock %}
</body>
以及
^{pr2}$以及
<-- grandchild.j2 -->
{% extends child %}
{% block content %}
<h2> Grandchild Content </h2>
{% endblock content %}
{% block page_js %}
<script src="grandchild.js"></script>
{% endblock page_js %}
从未呈现page_js
块。有没有什么方法可以在不改变ultra_base
的情况下呈现它?在
问题是
child.j2
中的page_js
块是“在无处可寻的中间”,它不会改变ulta_base.j2
的任何块,因此Jinja2不会从中呈现任何内容。解决方案非常简单,您甚至不需要定义新的extra_js
块,只需使用Jinja2的super()函数:ultra_base.j2
保持不变:
^{pr2}$child.j2
模板:{cd7>和^:
Jinja2将负责包含来自父模板的块内容。在
通过将
{% block page_js %} {% endblock %}
放在child.j2
中的extra_js
块内,可以呈现page_js
:相关问题 更多 >
编程相关推荐