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

0mkxixxg  于 2023-04-19  发布在  Python
关注(0)|答案(4)|浏览(182)

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

{% 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 %}
hi3rlvi2

hi3rlvi21#

Django自然不支持它。
可以实现forloop|continue和forloop|打破自定义过滤器。
http://djangosnippets.org/snippets/2093/

hgb9j2n6

hgb9j2n62#

Django模板中的for循环与普通的Python for循环不同,因此continuebreak将无法在其中工作。在Django docs中,没有breakcontinue模板标记。考虑到Keep-It-Simple-Stupid在Django模板语法中的整体位置,您可能必须找到另一种方法来完成您需要的内容。

7y4bm7vi

7y4bm7vi3#

对于大多数情况下,不需要自定义templatetags,这很容易:

继续

{% 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和Django模板)。

z0qdvdin

z0qdvdin4#

如果你想在某些条件下继续/中断,我使用下面的简单标签,如下与“Vanilla”Django 3.2.5:

@register.simple_tag
def define(val=None):
  return val

然后就可以将它作为模板中的任何变量使用

{% define True as continue %}
      
{% for u in queryset  %}

  {% if continue %}

    {% if u.status.description == 'Passed' %}
      <td>Passed</td>
      
      {% define False as continue %}

    {% endif %}

  {% endif %}

{% endfor %}

对于任何你想在模板上重用的变量类型都非常有用,而不需要使用with语句。

相关问题