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

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

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

Похожие вопросы
Strikt Москва
от 100 000 до 180 000 ₽
ITK academy Саратов
от 75 000 ₽
Sim-Ba Pay Санкт-Петербург
от 180 000 ₽