是否有任何理由在 Jinja 模板中使用 {% block name %} 而不是 {{ self.name() }} ?
Is there any reason to use {% block name %} over {{ self.name() }} in Jinja templating?
我 运行 遇到了想要在同一个基本模板中多次重复使用同一个内容块的问题。这导致我使用以下内容:
<li>
{% block backup %} {% endblock %}
</li>
...
<li>
{{ self.backup() }}
</li>
与每次只使用 self.backup()
相比,使用一次 block backup
然后每次使用 self.backup()
有什么优势吗?从我最基本的测试来看,网站上没有直接的区别。两种变体的运行和外观都一样。
该网站只是我公司的一个小型内部常见问题解答,因此性能并不是真正的问题。
一个 use-case 其中 {% block name %}{% endblock %}
有效但 {{ self.name()}}
无效是在模板化可选内容时。用 self
指定的任何内容都必须存在于 extends
它的页面中。
示例:
base.html
<head>
...
<link rel="stylesheet" type="text/css" href="static/css/reset.css"/>
<link rel="stylesheet" type="text/css" href="static/css/styles.css"/>
{{ self.stylesheet() }}
</head>
如果页面 extending
base.html 不包含 {% block stylesheet %}...{% endblock %}
,则该页面在找不到 stylesheet
时将无法加载并出现 500 服务器错误。如果它在 base.html
中声明为 {% block stylesheet %}...{% endblock %}
,则不会发生这种情况,它只是被跳过。
(通过添加 required
关键字,{% block name %}
可以使用相同的行为。)
我 运行 遇到了想要在同一个基本模板中多次重复使用同一个内容块的问题。这导致我使用以下内容:
<li>
{% block backup %} {% endblock %}
</li>
...
<li>
{{ self.backup() }}
</li>
与每次只使用 self.backup()
相比,使用一次 block backup
然后每次使用 self.backup()
有什么优势吗?从我最基本的测试来看,网站上没有直接的区别。两种变体的运行和外观都一样。
该网站只是我公司的一个小型内部常见问题解答,因此性能并不是真正的问题。
一个 use-case 其中 {% block name %}{% endblock %}
有效但 {{ self.name()}}
无效是在模板化可选内容时。用 self
指定的任何内容都必须存在于 extends
它的页面中。
示例:
base.html
<head>
...
<link rel="stylesheet" type="text/css" href="static/css/reset.css"/>
<link rel="stylesheet" type="text/css" href="static/css/styles.css"/>
{{ self.stylesheet() }}
</head>
如果页面 extending
base.html 不包含 {% block stylesheet %}...{% endblock %}
,则该页面在找不到 stylesheet
时将无法加载并出现 500 服务器错误。如果它在 base.html
中声明为 {% block stylesheet %}...{% endblock %}
,则不会发生这种情况,它只是被跳过。
(通过添加 required
关键字,{% block name %}
可以使用相同的行为。)