Как получить доступ к элементам массива в шаблоне Django?

167

Я получаю массив, arrпереданный моему шаблону Django. Я хочу получить доступ к отдельным элементам массива в массиве (например arr[0], arr[1]) и т. Д. Вместо циклического прохождения по всему массиву.

Есть ли способ сделать это в шаблоне Django?

miket
источник
4
Вы можете получить доступ к элементу, как это arr.0, arr.1... Другое решение: написать свой собственный шаблон тега arr|array_item: "0" или что-то вроде этого.
Рфоника
1
@rphonika Да, пример здесь: stackoverflow.com/a/29664945/2714931
WeizhongTu

Ответы:

304

Помните, что точечная нотация в шаблоне Django используется для четырех разных нотаций в Python. В шаблоне foo.barможет означать любое из:

foo[bar]       # dictionary lookup
foo.bar        # attribute lookup
foo.bar()      # method call
foo[bar]       # list-index lookup

Он пробует их в этом порядке, пока не найдет совпадение. Таким образом, foo.3вы получите свой индекс списка, потому что ваш объект не является dict с 3 в качестве ключа, не имеет атрибута с именем 3 и не имеет метода с именем 3.

Нед Бэтчелдер
источник
3
Разве первый и последний больше не похожи foo['bar']?
Боб Стейн
2
Кажется, нет никакого способа получить доступ к элементу списка, используя переменный индекс :(
Вики Чиджвани
Согласитесь с @VickyChijwani: четвертый вариант выше недействителен. Шаблоны Django, похоже, не выполняют поиск в индексе по списку с переменными
ehacinom
@hiyume Как это преодолеть?
Чаба Тот
Я не понимаю, что я не смог найти это в официальной документации. Не могли бы вы предоставить источник для этого поста? Я также поражен, как этот ответ не принят в настоящее время.
Касзанас
149
arr.0
arr.1

и т.п.

Офри Равив
источник
11
как печатать динамически, как например: arr.variablename
Nandha Kumar
Есть ли способ сделать это без магических чисел? Другими словами, чтобы «назвать» .0 .1 .2 и т.д ...? Например, массив ["имя"], массив ["фамилия"] и т. Д.
cyberjoac
@cyberjoac в этом случае использовать dict. В представлении: d = {'first_name': 'foo', 'last_name': 'bar'}. В шаблоне {{d.first_name}} будет работать просто отлично.
Офри Равив
31

Вы можете получить доступ к элементам последовательности с помощью arr.0 arr.1 и так далее. См . Главу «Система шаблонов Django» книги «Django» для получения дополнительной информации.

ЕМА
источник
2
Ссылка мертва
Jose_mr
7

Когда вы renderзапросите coctextнекоторую информацию: for exampel:

return render(request, 'path to template',{'username' :username , 'email'.email})

Вы можете получить к нему доступ по шаблону, например так: for variabels :

{% if username %}{{ username }}{% endif %}

for array :

{% if username %}{{ username.1 }}{% endif %}
{% if username %}{{ username.2 }}{% endif %}

Вы также можете называть объекты массива views.pyи использовать его как:

{% if username %}{{ username.first }}{% endif %}

если есть другая проблема, я хочу помочь вам

Омид Реза
источник