这是直接从我的Django模板中获取的:

{% for day in days %}
  <!-- {% cycle 'day' 'day' 'day last' as cls %} -->
  {% rounded "black" cls %} {# Custom tag giving me rounded borders. #}
  ...
  {% endrounded %}
{% endfor %}

我已经注释掉了 {%cycle%} ,因为我只用它来设置“ cls ”到“ day last ”循环中的每三次迭代。有没有更好的方法来做到这一点,而不向视图添加任何代码? (人们说逻辑应该不在模板之内,但反过来却差不多了。)

有帮助吗?

解决方案

我不确定我理解您遇到问题的原因,因为您当前的解决方案似乎有效。我不认为你需要HTML注释,因为 {%cycle%} as 没有输出任何东西,但除此之外它看起来很好。

但是,如果您想要其他方法,可以使用 divisibleby 过滤器:

{% for day in days %}
  {% if forloop.counter|divisibleby:3 %}
     {% rounded "black" "day last" %}
  {% else %}
     {% rounded "black" "day" %}
  {% endif %}
{% endfor %}

但我不认为这比你已经有的好。

其他提示

'Django开发版的新功能'

循环'as'标签现在具有'静音'模式:

http://docs.djangoproject.com/en/dev / REF /模板/建宏/#周期

http://code.djangoproject.com/ticket/13567

应用程序逻辑不应该在您的模板中。表示逻辑确实属于那里(这似乎是这样)。我把它放在那里。

嗯......这就是 cycle 标签的用途。我不知道你为什么试图避免它,但你应该知道:

  1. 任何需要选择性应用某些规则的逻辑都需要python代码,因为模板代码不会分配给变量。
  2. 必须从模板标签或视图函数逻辑调用python代码。
  3. 因此,如果你不使用视图逻辑,你就会遇到模板标签。要么你自己编写,要么使用内置的。 cycle 似乎和其他任何一样简单。有什么问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top