如何在Django模板中使用break并继续?

时间:2011-02-07 11:57:34

标签: python django

我想在我的代码中放置并继续,但它在Django模板中不起作用。如何使用Django模板for循环使用continue和break。这是一个例子:

{% for i in i_range %}
{% for frequency in patient_meds.frequency %}
{% ifequal frequency i %}
<td class="nopad"><input type="checkbox" name="frequency-1" value="{{ i }}" checked/> {{ i }} AM</td>
{{ forloop.parentloop|continue }} ////// It doesn't work
{ continue }                      ////// It also doesn't work
{% endifequal %}
{% endfor%}
<td class="nopad"><input type="checkbox" name="frequency-1" value="{{ i }}"/> {{ i }} AM</td>
{% endfor %}

3 个答案:

答案 0 :(得分:39)

Django自然不支持它。

您可以使用自定义过滤器实现forloop | continue和forloop |。

http://djangosnippets.org/snippets/2093/

答案 1 :(得分:28)

Django模板中的For循环与纯Python for循环不同,因此continuebreak将不起作用。在Django docs中自行查看,没有breakcontinue模板标记。鉴于Keep-It-Simple-Stupid在Django模板语法中的总体位置,您可能必须找到另一种方法来完成您的需要。

答案 2 :(得分:1)

在大多数情况下,不需要自定义模板标签,这很容易:

继续

{% for each in iterable %}
  {% if conditions_for_continue %}
       <!-- continue -->
  {% else %}
       ... code ..
  {% endif %}
{% endfor %}

突破使用相同的想法,但范围更广:

{% set stop_loop="" %}
{% for each in iterable %}
  {% if stop_loop %}{% else %}
       ... code ..
       under some condition {% set stop_loop="true" %}
       ... code ..
  {% endif %}
{% endfor %}

如果您接受超出需要的迭代。