Встроенные теги и фильтры шаблонов не облегчают (с Django 1.4), но это возможно, используя тег with
для кэширования переменных и add
, slugify
и slice
фильтрует для создания нового списка только с одним членом.
В следующем примере создается новый список, единственным участником которого является предыдущий член forloop
:
{% for item in list %}
{% if not forloop.first %}
{% with forloop.counter0|add:"-1" as previous %}
{% with previous|slugify|add:":"|add:previous as subset %}
{% with list|slice:subset as sublist %}
<p>Current item: {{ item }}</p>
<p>Previous item: {{ sublist.0 }}</p>
{% endwith %}
{% endwith %}
{% endwith %}
{% endif %}
{% endfor %}
Это неЭто элегантное решение, но система шаблонов django имеет две ошибки, которые делают этот хак неизбежным для тех, кто не хочет писать собственные теги:
Синтаксис шаблона Django не допускает вложенностьфигурные скобки.В противном случае мы могли бы сделать это:
{{ list.{{ forloop.counter|add:-1 }} }}
Оператор поиска не принимает значения, хранящиеся с использованием with
(и, возможно, по уважительной причине)
{% with forloop.counter|add:-1 as index %}
{{ list.index }}
{% endwith %}