Znacznik przekroju w szablonach Django może wykorzystywać kod podziału Pythona, ale składnia jest wyraźnie inna. Na przykład, jeśli chcesz uzyskać element sekwencji o zmiennej w Pythonie chcesz napisać coś podobnego do poniższego:
>>>mylist = ["0th Element", "1th Element"]
>>>zero, one = 0, 1
>>>mylist[zero]
"0th Element"
>>>mylist[one]
"1th Element"
Używając tej składni z Django kawałek szablonu tagu zwróci listę plasterkach w każdym przypadku, o wątpliwej użyteczności dla uzyskania elementu o znanej index:
{% with "0" as zero %}
{% with "1" as one %}
{% with "2" as two %}
{{mylist|slice:zero}} {{mylist|slice:one}} {{mylist|slice:two}}
{% endwith %}
{% endwith %}
{% endwith %}
świadczy na html:
[] ["0th Element"] ["0th Element", "1th Element"]
zanotować różnice: otrzymujesz re zamiast mylist[x]
.
Django zapewnia wystarczającą ilość narzędzi do obejścia tego problemu. Pierwsza sztuczka polega na użyciu wyraźnych wycinków, takich jak 0:1
dla twoich indeksów, a następnie |join:""
wynikowej listy w jeden element.Tak:
{% with "0:1" as zero %}
{{mylist|slice:zero|join:""}}
{% endwith %}
Wynik:
0th Element
Dzieje się to w szczególnie przydatny, gdy trzeba uzyskać dostęp do indeksu pętli dominującej gdy mamy do czynienia ze związkiem iterable wewnątrz pętli dziecka:
{% 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 %}
Ukończono tylko części zapasowe, chociaż nie sądzę, by Django wdrożył już osiągnięcia.
Czy możesz po prostu przekazać wartości, które potrzebujesz w widoku? jeśli znasz zasięg przed ręką, dlaczego nie podać dokładnie tych wartości, które próbujesz wyświetlić? – dm03514
Nie, nie mogę w tym przypadku. Jest to zakodowana strona niestandardowego koszyka na zakupy, a wszystko to jest częścią niektórych zagnieżdżonych formularzy. – Goran