Джанго: проблема с {% cycle%} - PullRequest
       8

Джанго: проблема с {% cycle%}

1 голос
/ 15 сентября 2009

Это взято прямо из моего шаблона 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 ]

3 голосов
/ 15 декабря 2010

«Новое в Django Development version»

Тег цикла «as» теперь имеет «тихий» режим:

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

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

3 голосов
/ 15 сентября 2009

Я не уверен, что понимаю, почему у вас проблема, поскольку ваше текущее решение, кажется, работает. Я не думаю, что вам нужны комментарии HTML, так как {% cycle %} с as ничего не выводит, но, кроме того, это выглядит нормально.

Однако, если вам нужен другой способ сделать это, вы можете использовать фильтр divisibleby:

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

но я не думаю, что это лучше, чем у вас уже есть.

0 голосов
/ 15 сентября 2009

Ммм ... для этого и нужен тег cycle. Я понятия не имею, почему вы пытаетесь избежать этого, но вы должны знать:

  1. Любая логика, требующая выборочного применения некоторого правила, потребует кода Python, поскольку код шаблона не присваивается переменным.
  2. Код Python должен быть вызван из тега шаблона или просмотреть логику функции.

Так что, если вы не будете использовать логику представления, вы застряли с тегами шаблона. Либо вы пишете свой собственный, либо используете встроенный. cycle кажется таким же простым, как и любой другой. В чем проблема.

0 голосов
/ 15 сентября 2009

Логика приложения не должна быть в ваших шаблонах. Логика представления действительно принадлежит там (что и выглядит). Я бы положил это туда.

...