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

Gol*_*ird 18 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 %}
Run Code Online (Sandbox Code Playgroud)

Jas*_*med 39

Django自然不支持它.

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

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


Gin*_*kas 28

for循环在Django模板是从for循环普通的Python不同,因此continuebreak不会在他们的工作.在Django 文档中看到自己,没有breakcontinue模板标签.鉴于Keep-It-Simple-Stupid在Django模板语法中的总体位置,您可能必须找到另一种方法来完成您的需要.

  • 这是真的,但它就像限制,而不是KISS.休息很简单.例如:如果任何嵌套循环产生足够的项目,则停止迭代主循环 - 非常有用且简单,在模板中中断 - 像mako或cheetah这样的整洁模板系统支持中断/继续. (3认同)

Sła*_*art 12

对于大多数情况,不需要自定义模板标签,这很简单:

继续

{% for each in iterable %}
  {% if conditions_for_continue %}
       <!-- continue -->
  {% else %}
       ... code ..
  {% endif %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

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

{% set stop_loop="" %}
{% for each in iterable %}
  {% if stop_loop %}{% else %}
       ... code ..
       under some condition {% set stop_loop="true" %}
       ... code ..
  {% endif %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

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

  • 这是 Jinja 模板。 (2认同)