如何在Django模板中使用break和continue?

31 投票
4 回答
40152 浏览
提问于 2025-04-16 11:22

我想在我的代码中使用“break”和“continue”,但是在Django模板中它们不起作用。我该如何在Django模板的循环中使用“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 %}

4 个回答

16

在大多数情况下,其实不需要自定义模板标签,使用起来很简单:

continue

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

break的用法和这个类似,但范围更广一些:

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

这是Jinja模板,你可以很方便地在Django中使用,因为Jinja是内置的。

你甚至可以在同一个项目中同时使用两种模板引擎(Jinja和Django模板)。

40

Django本身不支持这个功能。

不过,你可以通过自定义过滤器来实现forloop|continue和forloop|break。

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

37

在Django模板中的for循环和普通Python中的for循环是不一样的,所以在Django模板里,continuebreak是不能用的。你可以自己去Django的文档看看,里面没有breakcontinue这样的模板标签。考虑到Django模板语法的“简单至上”原则,你可能需要找到其他方法来实现你的需求。

撰写回答