Як отримати доступ до елементів масиву в шаблоні Django?


167

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

Чи є спосіб зробити це в шаблоні Django?


4
Ви можете отримати доступ пункт як це arr.0, arr.1... Інше рішення: написати свій власний тег шаблону arr|array_item: "0" або що - щось на зразок цього.
rphonika

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ви отримаєте ваш індекс списку, тому що ваш об’єкт не є диктатом, у якому 3 є ключовим, не має атрибута з ім'ям 3 та не має методу з ім'ям 3.


3
Хіба не перші та останні подібні foo['bar']?
Боб Штейн

2
Здається, немає можливості отримати доступ до елемента списку за допомогою змінного індексу :(
Vicky Chijwani

Погодьтеся з @VickyChijwani: четвертий варіант вище недійсний. Шаблони Django, схоже, не роблять перелік індексів списку зі змінними
ehacinom

@hiyume Як це подолати?
Csaba Toth

Я не розумію, що не міг цього знайти в офіційній документації. Чи можете ви надати джерело для цієї посади? Я також вражений тим, як ця відповідь зараз не прийнята.
Кашанас

149
arr.0
arr.1

тощо.


11
як надрукувати динаміку, наприклад: arr.variablename
Nandha Kumar

Чи можна це зробити без магічних чисел? Іншими словами, щоб "назвати" .0 .1 .2 і т.д. ...? Такі як array ["ім'я"], array ["прізвище"] тощо.
cyberjoac

@cyberjoac у такому випадку використовують диктант. У вікні: d = {'first_name': 'foo', 'last_name': 'bar'}. У шаблоні {{d.first_name}} буде добре працювати.
Офрі Равів


7

коли ви renderзвертаєтесь із проханням отримати coctextінформацію: для 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 %}

якщо є інша проблема, я хочу вам допомогти

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.