2009-09-15 26 views
1

这是从我的Django的模板直接采取: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”每三循环中的迭代。有没有更好的方法来做到这一点,而无需向视图添加任何代码? (人们说逻辑应该保持在模板之外,但反过来会更糟。)

回答

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

'{%cycle%}''as'* does *输出它,这是我通常不会期望的,但是......我会寻求您的解决方案。 – 2009-09-15 19:42:41

+0

你应该更新你的答案,因为陈述“循环与不输出任何东西”是不正确的。定义一个循环时,这是“无声”选项的要点。 https://docs.djangoproject.com/en/1.10/ref/templates/builtins/#cycle – user2867288 2016-09-18 03:20:26

0

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

+0

但问题(不清楚是它可能be)是:我如何在不使用HTML注释中的{%cycle%}的情况下做同样的事情,而不将它放入视图中? – 2009-09-15 19:14:43

0

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

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

所以,如果你不会使用视图逻辑,你坚持使用templatetags。要么你自己写,要么使用内置的。cycle似乎和其他任何东西一样容易。有什么问题。

+0

问题在于'{%cycle%}'被替换为其结果,这就是为什么我不得不求助于隐藏以HTML评论结果。换句话说,它将在生成的HTML源代码中发光。正如罗斯曼指出的那样,还有另一种方式来完成同样的事情。 – 2009-09-16 08:30:24