有没有办法在Django模板中使块可选

Ver*_*non 15 django django-templates

在Django的模板系统中,如果我有一个块,我想使用if语句使其可选,我该怎么做?

我在尝试这个:

{% if val %}{% block title %}Archive {{ foo }}{% endblock %}{% endif %}
Run Code Online (Sandbox Code Playgroud)

但这不起作用.有没有办法做到这一点,使给定值(在这种情况下空)块没有被发出,基本模板使用原始值?

编辑:让我更具体一点,以便更容易回答.

我有一个页面,每页有10个条目.然后用户可以去到下一个页面,看到了未来十年的项目.对于每个进一步的网页,他们走了,过去的第一,我想有标题标签说类似"存档1"或"归档10",但如果他们回到原来的页面,它不再存档,并应刚去的基本模板已经给原网站的标题.

Jam*_*mie 23

我遇到了一个与我正在研究的项目类似的问题.以下是我使用{{block.super}}从父块中提取默认值的方法:

我的父模板包含:

{% block title %}Default Title{% endblock %}
Run Code Online (Sandbox Code Playgroud)

我的孩子模板包含:

{% block title %}
    {% if new_title %}{{ new_title }}{% else %}{{ block.super }}{% endif %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

*注意:如果您打算在HTML标题标记中使用结果,则可能需要将代码包装在{%spaceless%} {%endspaceless%}中.

(看起来Jordan Reiter在回复之前在原问题的评论中发布了相同的解决方案.)


Man*_*dan 9

据我所知,blocks是占位符在子模板中被"覆盖".它们必须在"编译时"定义,而不是在"运行时"定义.

至于你的具体问题,为什么不根据页码修改标题(假设你使用分页)?像这样的东西:

{% block title %}
    {% ifequal page 1 %}Current{% else %}Archive {{ page }}{% endifequal %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)