Pergunta

Isto é tomado diretamente de meu modelo Django:

{% for day in days %}
  <!-- {% cycle 'day' 'day' 'day last' as cls %} -->
  {% rounded "black" cls %} {# Custom tag giving me rounded borders. #}
  ...
  {% endrounded %}
{% endfor %}

Eu tenho comentado a {% cycle %} porque eu só usá-lo para set "cls" para "day last" a cada terceira iteração do loop. Existe alguma maneira melhor de fazer isso sem adicionar qualquer código para a vista? (As pessoas dizem que a lógica deve ficar fora de modelos, mas tê-lo o contrário é quase pior.)

Foi útil?

Solução

Eu não tenho certeza eu entendo porque você tem um problema, uma vez que sua solução atual parece funcionar. Eu não acho que você precisa dos comentários HTML, uma vez {% cycle %} com as não exibe nenhum output, mas fora isso parece bem.

No entanto, se você quiser uma outra maneira de fazer isso, você pode usar o filtro divisibleby:

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

mas eu não acho que isso é melhor do que o que você já tem.

Outras dicas

'Novo na versão de desenvolvimento do Django'

O ciclo 'como' tag agora tem um modo 'silencioso':

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

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

lógica

A aplicação não deve estar em seus modelos. Apresentação lógica pertence lá (que é o que parece ser). Eu colocá-lo lá.

Ummm ... que é o que a tag cycle é para. Eu não tenho idéia por que você está tentando evitá-lo, mas você deve saber:

  1. Qualquer lógica que requer aplicação seletiva de alguma regra exigirá código python, uma vez código de modelo não atribuir a variáveis.
  2. O código python deve ser ou chamado a partir de uma lógica templatetag ou vista função.

Então, se você não vai usar a lógica vista, você está preso com um templatetags. Ou você escrever o seu próprio ou você usa um que é construído dentro. cycle parece ser tão fácil quanto qualquer outro. Qual é o problema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top