Вопрос

Это взято прямо из моего шаблона 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 " на последний день " каждая третья итерация в цикле. Есть ли лучший способ сделать это без добавления какого-либо кода в представление? (Люди говорят, что логика должна быть вне шаблонов, но наоборот - чуть хуже.)

Это было полезно?

Решение

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

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

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

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

Другие советы

'Новое в Django Development version'

Цикл «as» теперь имеет режим «без звука»:

http://docs.djangoproject.com/en/dev / исх / шаблоны / встроенные функции / # цикл

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

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

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

<Ол>
  • Любая логика, требующая выборочного применения какого-либо правила, потребует кода Python, поскольку код шаблона не присваивается переменным.
  • Код Python должен вызываться либо из тега шаблона, либо из логики функции просмотра.
  • Так что если вы не будете использовать логику представления, вы застряли с тегами шаблона. Либо вы пишете свой собственный, либо используете встроенный. цикл кажется таким же простым, как и любой другой. В чем проблема.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top