Как использовать шаблонную нотацию Django внутри цикла for - PullRequest
2 голосов
/ 06 декабря 2010

Я пытаюсь получить значение ключа словаря и отобразить его на странице в шаблоне Django:

{% for dictkey in keys %}
    <p> {{ mydict.dictkey }} </p>
{% endfor %}

(скажем, «ключи» и «mydict» были переданы в шаблон)в контексте)

Django отображает страницу, но без содержимого словаря («Недопустимая переменная шаблона»)

Я предполагаю, что проблема в том, что вместо этого он пытается выполнить mydict ['dictkey']mydict [ фактический ключ в переменной dictkey ]?Как можно «избежать» этого поведения?

Спасибо!

ОБНОВЛЕНИЕ : основываясь на полученных ответах, мне нужно добавить, что я на самом деле специально ищу, какдобиться ключевого поиска внутри цикла for.Это более типично для моего действительного кода:

{% for key, value in mydict1.items %}
    <p> {{ mydict2.key }} </p>
{% endfor %}

По сути, у меня есть два словаря с одинаковыми ключами, поэтому я не могу выполнить трюк items () для второго.

Ответы [ 3 ]

4 голосов
/ 06 декабря 2010

См. этот ответ на (возможно, дубликат) связанный вопрос.

Создает пользовательский фильтр, который при применении к словарю с ключом в качестве аргумента выполняет поиск в словаре с использованием ключа и возвращает результат.

Код:

@register.filter
def lookup(d, key):
    if key not in d:
        return None
    return d[key]

Использование:

{% for dictkey in dict1.keys %}
    <p> {{ dict2|lookup:dictkey }} </p>
{% endfor %}

Регистрация фильтра описана в документации .

Мне грустно, что такого рода вещи не встроены.

1 голос
/ 06 декабря 2010

См. Документы: http://docs.djangoproject.com/en/dev/ref/templates/builtins/#for

{% for key, value in data.items %}
    {{ key }}: {{ value }}
{% endfor %}
1 голос
/ 06 декабря 2010

С http://docs.djangoproject.com/en/dev/ref/templates/builtins/#for

Это также может быть полезно, если вам нужен доступ к элементам в словаре.Например, если ваш контекст содержит данные словаря, следующие ключи будут отображать ключи и значения словаря:

{% for key, value in data.items %}
    {{ key }}: {{ value }}
{% endfor %}

Хитрость заключается в том, что вам нужно вызвать dict.items(), чтобы получить (key, value) пара.

...