Шаблоны Django Первый элемент списка - PullRequest
23 голосов
/ 26 ноября 2010

Я передаю словарь моему шаблону Django,

Словарь и шаблон похож на это -

lists[listid] = {'name': l.listname, 'docs': l.userdocs.order_by('-id')}

{% for k, v in lists.items %}
    <ul><li>Count: {{ v.docs.count }}, First: {{ v.docs|first }}</li></ul>
{% endfor %}

Теперь docs - это список типа userdocs.т.е. это пример.Итак, фильтр first возвращает мне этот экземпляр.Из этого мне нужно извлечь это id.Как мне это сделать?

Я пробовал {{ v.docs|first }}.id и другие бесполезные испытания.

Ответы [ 3 ]

51 голосов
/ 26 ноября 2010

Вы можете использовать шаблонный тег {% with %} для такого рода вещей.

{% with v.docs|first as first_doc %}{{ first_doc.id }}{% endwith %}
37 голосов
/ 03 апреля 2015

Вы можете попробовать это:

{{ v.docs.0 }}

Нравится arr.0

Вы можете получить элементы по индексу (0, 1, 2 и т. Д.).

5 голосов
/ 06 июля 2013

Я не знаю, полезно ли это.

То, что вы хотите - это первое значение итерируемого (v.docs), и вы перебираете другое инкапсулирующее итерируемое (списки).

Для счетчика я бы сделал то же самое, но для первого элемента. Я бы перебрал v.docs индивидуально и извлек бы первое значение через внутренний цикл.

{% for doc in v.docs %}
    {% if v.docs | first %}  
    <li>doc</li>
    {% endif %}
{% endfor %}

Примечание: первый фильтр применяется к v.docs, а не к doc.Да уж.Это включает в себя еще один цикл: (

...