1

这直接取自我的 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

4 回答 4

3

我不确定我是否理解您为什么会遇到问题,因为您当前的解决方案似乎有效。我认为您不需要 HTML 注释,因为{% cycle %}withas不会输出任何内容,但除此之外它看起来还不错。

但是,如果您想要另一种方式来做到这一点,您可以使用divisibleby过滤器:

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

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

于 2009-09-15T19:37:40.627 回答
3

'Django 开发版本中的新功能'

循环“as”标签现在有一个“静默”模式:

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

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

于 2010-12-15T11:29:19.893 回答
0

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

于 2009-09-15T19:11:53.487 回答
0

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

  1. 任何需要选择性应用某些规则的逻辑都需要 python 代码,因为模板代码不会分配给变量。
  2. python 代码必须从模板标签或视图函数逻辑调用。

所以如果你不使用视图逻辑,你就会被模板标签困住。要么你自己写,要么使用内置的。 cycle似乎和其他任何东西一样容易。有什么问题。

于 2009-09-15T19:42:31.117 回答