尽管在if语句中为False,但始终显示{%阻止某物%}

时间:2018-06-29 09:11:15

标签: django django-templates

我有两种类型的博客文章。常规博客文章和翻译文章。它们都有不同的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>

1 个答案:

答案 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 }}将呈现父模板的内容。