jjt*_*jjt 17 django django-templates
我有一个结构,(% block heading %}在我的基本模板中通常有一个页面标题:
base.html文件
<h2>{% block heading %}{% endblock %}</h2>
Run Code Online (Sandbox Code Playgroud)
大多数时候,我会通过扩展基础的模板传递这样的标题:
扩展-base.html文件
{% block heading %}Super Cool Page!{% endblock %}
Run Code Online (Sandbox Code Playgroud)
但是,对于特殊页面,我不希望有一个页面标题:
延伸碱基special.html
{% block heading %}{% endblock %}
Run Code Online (Sandbox Code Playgroud)
理想情况下,这应该排除<h2>标签.现在,我可以让所有扩展模板都包含<h2>标签,但这违反了DRY,因为每个页面都应该具有页面级标题的相同元素.我更喜欢做的是(这似乎不起作用):
基prefered.html
{% if heading %}
<h2>{% block heading %}{% endblock %}</h2>
{% endif %}
Run Code Online (Sandbox Code Playgroud)
这在模板级别上是否可行,或者我是否需要为此查看视图?
cza*_*aic 31
你可以双重包装它
{% block noheader %}
<h2>{% block header %}Super Cool Page!{% endblock header %}</h2>
{% endblock noheader %}
Run Code Online (Sandbox Code Playgroud)
在没有标题的页面上
{% block noheader %}{% endblock %}
Run Code Online (Sandbox Code Playgroud)
像这样做:
<h2>{% block heading %}{% endblock %}</h2>{% block heading %}{% endblock %}然后扩展第一个或第二个模板。我相信这应该是最简单的方法。
顺便说一下。通过写作:
{% if heading %}
Run Code Online (Sandbox Code Playgroud)
您实际上是在名称为“标题”的上下文中要求元素的布尔值。django 标记语言的元素不在上下文中,所以你不能要求它们。你可以写一个标签,为上下文添加一些东西,我曾经需要这样的东西并使用它,但我不相信这是去这里的方式。以上解决方案应该有效(我没有机器来检查这个),这是 IMNSHO 的最佳方式。
| 归档时间: |
|
| 查看次数: |
5835 次 |
| 最近记录: |