【发布时间】:2014-08-30 11:19:03
【问题描述】:
我有一个定义了条件标头的基本模板:
{% if blah %}
<h1>Title 1</h1>
{% else %}
<h1>Title 2</h1>
{% endif %}
模板中是否有可用的技术/功能允许您在从基础扩展的模板中设置标题?
显然您不能使用传统的块标记,因为它们只能出现一次,但是您可以做些什么来有效地为每个 <h1> 实现一个 {% block title %},以便从 if 呈现的任何标题被扩展模板改变了?
更具体地说,我在基础中得到的模板代码是;
<div class="wrapper">
{% if request.current_page.get_ancestors|length <= 1 %}
{% block page_title %}
<h1>{{ request.current_page.get_page_title }}</h1>
{% endblock page_title %}
{% else %}
{% for ance in request.current_page.get_ancestors %}
{% if ance.level == 1 %}
{% block page_title %}
<h1>{{ ance.get_page_title }}</h1>
{% endblock page_title %}
{% endif %}
{% endfor %}
{% endif %}
</div>
编辑
基本模板的完整代码; http://pastebin.com/cyWAiWn2
扩展模板的完整代码; http://pastebin.com/ThEqff47
这个功能要求的原因是我在 django-cms 中创建了一个页面并将我的应用程序连接到该页面。在那个阶段,{{ request.current_page.get_page_title }} 只会返回我创建的 django-cms 页面的标题。
如果您在该页面上做了一些事情,使挂钩的应用程序将您发送到另一个视图/模板,您实际上并没有在 django-cms 中更改页面,所以get_page_title 仍然是相同的,但是您的模板'现在渲染的 ve 几乎总是有不同的标题。
显然,您可以将新页面标题包含为<h2> 或其他任何内容,并将其放在base_content.html 中的<h1> 下方,但基本标题通常对于该级别所需的页面内容是多余的。
【问题讨论】:
标签: django django-templates django-cms