我想在Django模板中声明一个flag变量,如果发生某些事情,请更改它。 但是,当我通过自定义标签更改变量的值时,它将被声明为新变量,并且不会更改。
例如我的模板标签和Django模板是:
模板标签:
@register.simple_tag
def update_variable(value):
return value
html:
{% with True as flag %}
<h1>1: {{ flag }}</h1>
{% for e in events %}
{% if e.title == '***' %}
{% update_variable False as flag %}
<h1>2: {{ flag }}</h1>
{% endif %}
{% endfor %}
<h1>3: {{ flag }}</h1>
{% endwith %}
结果是:
1: True
2: False
3: True
但是最终结果应该为False!该怎么做?
答案 0 :(得分:0)
我找到了解决方案。要检查列表的所有元素,我们可以使用自定义过滤器,并在其中做一些事情:
html:
//load custom filter
{% load my_filters %}
{% if "anything we want"|is_in:events.all %}
//do some thing...
{% else %}
//do some thing...
{% end if%}
my_filter文件中的自定义过滤器:
register = template.Library()
def is_in(case, list):
for element in list:
if element.time_span == case:
return True
return False
register.filter(is_in)