Элемент списка ссылок по индексу в шаблоне Django?


111

Это может быть просто, но я огляделся и не нашел ответа. Как лучше всего ссылаться на один элемент в списке из шаблона Django?

Другими словами, как мне сделать эквивалент {{ data[0] }}в языке шаблонов?

Спасибо.

Ответы:


189

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
Одно из самых простых объяснений для изучения приложения Template Tags!
vanguard69

5
Это было здорово! Но с форматом {{List | index: x}}, как мне получить доступ к значениям, где я обычно использую точку? {{(List | index: x) .name}} явно не работает. Спасибо!
JTFouquier 01

Именно то, что я искал. Спасибо!
Грант Бартель

У меня есть массив, в котором я не уверен в индексе желаемого значения{% 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попытки django data.objи data.obj(). Если они не работают, он пытается data["obj"]. В вашем случае data[0]может быть записано как {{ data.0 }}. Но я рекомендую вам вытащить data[0]представление и отправить его как отдельную переменную.


1

@ jennifer06262016, вы определенно можете добавить еще один фильтр для возврата объектов внутри набора запросов 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.