Django奇怪的模板条件渲染

时间:2015-07-15 04:36:33

标签: python django

这是我的django模板文件:

{% if chart %}
    {% block chart_content %}
       // some for loop
    {% endblock %}
{% else %}
    {% block content %}

    {% endblock %}
{% endif %}

这是我的“base.html”:

<div class = "container">
    {% block content %}
    {% endblock %}
</div>
{% block chart_content %}
{% endblock %}

呈现上述模板时,页面中会显示“if”和“else”内容。换句话说,评估“if”和“else”。有谁能告诉我这是什么问题?

3 个答案:

答案 0 :(得分:3)

来自Django template if statement always evaluates to true

您无法将控制流标记包裹起来,就像在块周围一样。您的问题是,子模板的块数据定义仅仅因为它存在而被使用。

您可以通过将if标记放在块数据中来修复它。如果要在列表为空时继承父项的内容,请添加扩展为{{block.super}}的else案例。

答案 1 :(得分:0)

在“base.htm”模板中,您确定并使用了块,默认情况下您会看到这些块内容,而在继承的模板上,您只能覆盖在父模板中确定的块的内容,您无法设置出现或消失的块,你可以通过重新确定没有内容的块来消除继承的块:

{# base.html #}
{% block x %}The X Block{% endblock %}

并继承:

{# index.html #}
{% extends "base.html" %}
{% block x %}{% endblock %}

答案 2 :(得分:0)

其他答案对模板规则是正确的。但是,如果你只是想修复你的结果,也许这样的事情可以解决问题。

select `key`,
group_concat(
  case when `value` is not null 
  then `language` 
  else null end) languages,
concat(
  (sum(`value` is not null )/ count(distinct `language`) ) * 100,
  '%') translated
from table1
group by `key`