Ответ 1
Вы можете использовать {% with %}
templatetag для такого рода вещей.
{% with v.docs|first as first_doc %}{{ first_doc.id }}{% endwith %}
Я передаю словарь в свой шаблон 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
и различные другие бесполезные испытания.
Вы можете использовать {% with %}
templatetag для такого рода вещей.
{% with v.docs|first as first_doc %}{{ first_doc.id }}{% endwith %}
Вы можете попробовать следующее:
{{ v.docs.0 }}
Как arr.0
Вы можете получить элементы по индексу (0
, 1
, 2
и т.д.).
Я не знаю, полезно ли это.
То, что вы хотите, это первое значение итеративного (v.docs), и вы выполняете итерацию по другому инкапсулирующему итерабельному (спискам).
Для count, я бы сделал то же самое, но для первого элемента. Я перебирал по v.docs индивидуально и извлекал первое значение через внутренний цикл.
{% for doc in v.docs %}
{% if v.docs | first %}
<li>doc</li>
{% endif %}
{% endfor %}
Примечание: первый фильтр применяется к v.docs, а не к doc. Да. Он включает в себя еще один цикл: (