Шаблоны 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 и другие бесполезные попытки.


person Srikar Appalaraju    schedule 26.11.2010    source источник


Ответы (3)


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

{% with v.docs|first as first_doc %}{{ first_doc.id }}{% endwith %}
person Daniel Roseman    schedule 26.11.2010
comment
Взломал и нашел альтернативу, скажите мне, если это плохая практика - {{ v.movies.0.doc.id }} - person Srikar Appalaraju; 26.11.2010

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

{{ v.docs.0 }}

Как 2_

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

person Abdul Majeed    schedule 03.04.2015
comment
Спасибо за общий ответ. Мне нужно первое и второе ;) - person Razvan Stefanescu; 26.11.2015

не знаю поможет ли это..

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

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

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

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

person Johnson    schedule 06.07.2013
comment
вы должны изменить v.docs | first на v.docs|first, потому что вы получаете эту ошибку: Could not parse the remainder: '|' from '|' - person NEBEZ; 27.03.2021