Django:问题{%cycle%}

时间:2009-09-15 19:04:42

标签: django django-templates cycle rounded-corners

这是直接从我的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”。有没有更好的方法来做到这一点,而不向视图添加任何代码? (人们说逻辑应该不在模板之内,但反过来却差不多了。)

4 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:3)

'Django开发版的新功能'

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

http://docs.djangoproject.com/en/dev/ref/templates/builtins/#cycle

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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