我有两种类型的博客文章。常规博客文章和翻译文章。它们都有不同的html标记。我的模型中有一个布尔变量translation_bool
,以检查它是否是翻译文章。如果是,我希望它显示我的{% block translation %}
,如果不是,则显示{% block translation %}
。它使用普通的html代码,而不使用html标签。但是我有太多可重用的代码,以至于难以管理。
所以我的问题是:尽管它在if语句中,但为什么会发生呢?
文章模板:
{% extends "base_generic.html" %}
{% load static %}
{% block js %}...{% endblock %}
{% if blogpost.translation_bool == True %}
{% block translation %}....{% endblock %}
{% else %}
{% block content %}...{% endblock %}
{% endif %}
{% block sidebar %}....{% endblock %}
在基本通用模板中:
<div class="row">
<div class="col-md-1"></div>
<div class="col-md-8">
{% block content %}{% endblock %}
{% block translation %}{% endblock %}
</div>
<div class="col-md-3">
{% block social_media %}...{% endblock %}
{% block sidebar %}...{% endblock %}
</div>
</div>
</body>
答案 0 :(得分:1)
这是因为未在子模板中定义的块将呈现父模板的值。因此,在您的情况下,您应该在父模板中执行验证。或者,如果无法覆盖内容为空的子项中的块,则为
{% block translation %}
{% if blogpost.translation_bool == True %}
{{ block.super }}
{% else %}
{% endif %}
{% endblock %}
{% block content %}
{% if blogpost.translation_bool == False %}
{{ block.super }}
{% else %}
{% endif %}
{% endblock %}
注意{{ block.super }}
将呈现父模板的内容。