【问题标题】:Django: Problem with {% cycle %}Django:{% 循环 %} 的问题
【发布时间】:2009-09-15 19:04:41
【问题描述】:

这是直接取自我的 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”。有没有更好的方法可以在不向视图添加任何代码的情况下做到这一点? (人们说逻辑应该远离模板,但反过来使用它几乎更糟糕。)

【问题讨论】:

    标签: django django-templates cycle rounded-corners


    【解决方案1】:

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

    但是,如果您想要另一种方法,您可以使用 divisibleby 过滤器:

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

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

    【讨论】:

    • {% cycle %}as 确实 输出它,这是我通常不会想到的,但是是的......我会寻求你的解决方案。
    • 您应该更新您的答案,因为“使用 as 循环不输出任何内容”的说法不正确。这就是定义循环时“静默”选项的意义所在。 docs.djangoproject.com/en/1.10/ref/templates/builtins/#cycle
    【解决方案2】:

    'Django 开发版中的新功能'

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 但问题(可能不清楚)是:我如何在不使用 HTML 注释中的 {% cycle %} 且不将其放入视图的情况下做同样的事情?
      【解决方案4】:

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

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

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

      【讨论】:

      • 问题是 {% cycle %} 被替换为它的结果,这就是为什么我不得不求助于用 HTML 注释隐藏结果。换句话说,一个愚蠢的 hack 将在生成的 HTML 源代码中大放异彩。正如罗斯曼指出的那样,还有另一种方法可以完成同样的事情。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      • 1970-01-01
      • 2020-07-11
      • 2011-09-19
      相关资源
      最近更新 更多