Подтвердить что ты не робот

Шаблоны Django Первый элемент списка

Я передаю словарь в свой шаблон 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 и различные другие бесполезные испытания.

4b9b3361

Ответ 1

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

{% with v.docs|first as first_doc %}{{ first_doc.id }}{% endwith %}

Ответ 2

Вы можете попробовать следующее:

{{ v.docs.0 }}

Как arr.0

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

Ответ 3

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

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

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

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

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