@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 }} тоже не получится. Как? Должен же быть вариант.

Если коллекциями никак, готов расмотреть иные варианты. Задача сводится к заполнению двумерного массива и его выводу в шаблоне. Обойти циклом все элементы к сожалению не вариант. Нужно прямое обращение по индексу.
  • Вопрос задан
  • 449 просмотров
Решения вопроса 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, официальная поддержка которого недавно появилась.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы