Django Templating: как получить доступ к свойствам первого элемента в списке


88

Довольно просто. У меня есть список Python, который я передаю в шаблон Django.

Я могу получить доступ к первому элементу в этом списке, используя

{{ thelist|first }}

Однако я также хочу получить доступ к свойству этого элемента ... в идеале вы могли бы подумать, что это будет выглядеть так:

{{ thelist|first.propertyName }}

Но, увы, это не так.

Есть ли какое-то решение для этого шаблона, или я просто собираюсь передать дополнительную переменную шаблона ...

Ответы:


182

Вы можете получить доступ к любому элементу в списке по его порядковому номеру. В шаблоне это работает так же, как и любой другой поиск свойств:

{{ thelist.0.propertyName }}

Хм. Однако это не работает с inline_admin_formset. Я предполагаю, что итератор работает не так, как я ожидал.
Шейн

Привет, Даниэль, не могли бы вы проверить мой вопрос, связанный с шаблоном / представлением stackoverflow.com/questions/34791375/… ?
Sathish

Это намного лучше, чем forцикл для просмотра каждого сообщения об ошибке. Благодарность!
IIllIIll

1
А thelist.-1.propertyNameпо последнему пункту?
Asqiir

1
Нет, к сожалению, это не сработает, Django не может это разобрать. Вам нужно будет использовать withтег вместе с |last, как предлагает Марк в другом ответе.
Дэниел

33

Вы можете объединить withтег firstшаблона с фильтром шаблона, чтобы получить доступ к свойству.

{% with thelist|first as first_object %}
    {{ first_object.propertyname }}
{% endwith %}

1
Для словаря сначала возвращается кортеж для пары ключ / значение, это немного некрасиво, но я добавил еще один оператор with, чтобы получить только значения. {% with thelist | first as first_object%} {% with first_object.1 as object%} {{object}} {% endwith%} {% endwith%}
Мэтью Пёрдон

21

Если вы пытаетесь получить доступ к полю manytomany, не забудьте добавить all, чтобы оно выглядело какobject.m2m_field.all.0.item_property


1
Могу дать вам +10 при упоминании "всех", вы спасли мне день;)
cwhisperer

0

потенциально более четкий ответ / синтаксис для доступа к свойству ManyToManyField в списке объектов, предоставленном для шаблона django, будет выглядеть следующим образом:

{{ object_list.0.m2m_fieldname.all.0.item_property }}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.