Тег среза в шаблонах Django может использовать код среза Python, но синтаксис безошибочно отличается. Например, если вы хотите получить элемент последовательности с переменной, в python вы напишите что-то похожее на следующее:
>>>mylist = ["0th Element", "1th Element"]
>>>zero, one = 0, 1
>>>mylist[zero]
"0th Element"
>>>mylist[one]
"1th Element"
Использование этого синтаксиса с тегом шаблона среза Django в каждом случае вернет нарезанный список сомнительной утилиты для получения элемента с известным индексом:
{% with "0" as zero %}
{% with "1" as one %}
{% with "2" as two %}
{{mylist|slice:zero}} {{mylist|slice:one}} {{mylist|slice:two}}
{% endwith %}
{% endwith %}
{% endwith %}
Отображает в HTML:
[] ["0th Element"] ["0th Element", "1th Element"]
Обратите внимание на различия: вы получаете результат mylist[:x]
вместо mylist[x]
.
Django предоставляет достаточно инструментов, чтобы обойти это. Первый трюк заключается в использовании явных срезов, таких как 0:1
для ваших индексов, а затем |join:""
результирующий список в один элемент. Вот так:
{% with "0:1" as zero %}
{{mylist|slice:zero|join:""}}
{% endwith %}
Урожайность:
0th Element
Это особенно удобно, если вам нужен доступ к индексу родительского цикла при работе с итерируемым внутри дочернего цикла:
{% for parent in parent_loop %}
{% cycle "0:1" "1:2" "2:3" as parent_loop_index silent %}
{% for child in child_loop %}
{{child|slice:parent_loop_index|join:""}}
{% endfor %}
{% endfor %}
В комплекте только запасные части, хотя я не думаю, что Django реализовал достижения.