Елемент довідкового списку за індексом у шаблоні Django?


107

Це може бути просто, але я озирнувся і не зміг знайти відповіді. Який найкращий спосіб посилатися на один елемент у списку із шаблону Django?

Іншими словами, як мені зробити еквівалент {{ data[0] }}у мові шаблону?

Дякую.

Відповіді:


184

Це схоже {{ data.0 }}. Див. Змінні та пошукові запити .


47
Прикро, що я не можу сказати {{ data.foo }}, де fooє змінна зі значенням індексу, а не ім'ям властивості.
Майк Десимоне

1
Якщо ви готові створити спеціальний тег, ви можете зробити набагато більше. Тут ми просто працюємо з вбудованими речами.
Майк Десімоне

Посилання більше не працює, спробуйте це: docs.djangoproject.com/en/1.10/ref/templates/api/…
Speccy

76

Кращий спосіб: спеціальний фільтр шаблонів: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

наприклад отримати шаблон my_list [x] у шаблонах:

в шаблон

{% load index %}
{{ my_list|index:x }}

templatetags / index.py

from django import template
register = template.Library()

@register.filter
def index(indexable, i):
    return indexable[i]

якщо my_list = [['a','b','c'], ['d','e','f']]ви можете використовувати {{ my_list|index:x|index:y }}в шаблоні, щоб отриматиmy_list[x][y]

Це добре працює з "за"

{{ my_list|index:forloop.counter0 }}

Випробуваний і працює добре ^ _ ^


1
Одне з найпростіших пояснень - вивчити додаток Теги шаблонів!
vanguard69

5
Це було чудово! Але за допомогою формату {{Список | індекс: x}} я можу отримати доступ до значень там, де я зазвичай використовую крапку? {{(Список | індекс: x) .name}} очевидно не працює. Дякую!
JTFouquier

Саме те, що я шукав. Дякую!
Грант Бартель

У мене є масив, в якому я не впевнений у індексі бажаного значення{% for id in article_details.heading.contents.article_ids %} {% if id.type == 'DOI' %} {{ article_details.heading.contents.article_ids.forloop.counter0.value }} {% endif %} {% endfor %}
Акін Хван,

Я повторюю список (збіги). У процесі ітерації у мене є інший список, де я хочу використовувати індекс (counter0), я спробував {{matchTeamEmblems.forloop.counter0.homeTeamID}}, але це не працює, matchTeamEmblems - це список Я генерую у simple_tag, який створює URL-адресу (статичну ..) для моїх емблем, але я не можу отримати до них доступ
kaya

24

{{ data.0 }} повинен працювати.

Скажімо, ви написали data.objспробу джанго data.objі data.obj(). Якщо вони не працюють, вони намагаються data["obj"]. У вашому випадку data[0]можна записати як {{ data.0 }}. Але я рекомендую вам data[0]відкрити подання та надіслати його як окрему змінну.


1

@ jennifer06262016, ви можете точно додати ще один фільтр, щоб повернути об’єкти всередині Queryset django.

@register.filter 
def get_item(Queryset):
    return Queryset.your_item_key

У такому випадку ви введете щось подібне {{Queryset | index: x | get_item}} у свій шаблон, щоб отримати доступ до якогось об’єкта словника. Це працює для мене.

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