@polkabana

Как вывести defaultdict поэлементно в шаблоне Django?

Имеем следующий код:

from collections import defaultdict

foo = defaultdict(dict)

foo[1][1] = 12
foo[1][2] = 24
foo[2][1] = 36
foo[2][2] = 48
foo[3]['string'] = 'foo bar'

print foo[2][1]
print foo[3]['string']


Принты выводят что нужно (48 и 'foo bar'). Теперь хотелось бы в шаблоне вывести используя конструкции вроде {{ foo[1][3] }} (так нельзя, знаю). {{ foo.1.3 }} тоже не получится. Как? Должен же быть вариант.

Если коллекциями никак, готов расмотреть иные варианты. Задача сводится к заполнению двумерного массива и его выводу в шаблоне. Обойти циклом все элементы к сожалению не вариант. Нужно прямое обращение по индексу.
  • Вопрос задан
  • 444 просмотра
Решения вопроса 1
Создаете кастомный фильтр, который достает элемент из dict.

@register.filter
def get_item(v, a):
    return v.get(a)

Теперь в шаблоне можно сделать (или даже для этого использовать переменные):

{{ foo|get_item:1|get_item:3 }}

p.s. Но зачем тут defaultdict, да и вообще dict? Почему нe list?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
MAKAPOH
@MAKAPOH
многостаночник
Насколько я знаю в стандартном шаблонизаторе никак, в этом случае надо написать свою шаблонную метку. Либо использовать шаблонизатор jinja, официальная поддержка которого недавно появилась.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы