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 }}
RealScatman
источник