Шаблоны Django "для циклов" не работают правильно - PullRequest
1 голос
/ 19 ноября 2011

Я пытаюсь создать теги шаблонов, использующие словарь в settings.py для создания меню.

У меня есть это как часть моего шаблона.

{% for menu_item in menu %}
     <li class="single-link"><a href="{{ menu_item.url }}" title="{{ menu_item.caption }}">{{ menu_item.caption }}</a></li>
{% endfor %}

Контекст, переданный этому тегу, содержит

context['menu'] = {'keywords': {'url': '#', 'caption': 'test'}, 'start': {'url': '#', 'caption': 'test'}, 'flippa': {'url': '#', 'caption': 'test'}}

{{ menu.start.caption }} работает нормально, однако в моем цикле for menu_item содержит только 'keywords' или 'start' или 'flippa', а использование . вообще не работает.

Кто-нибудь знает, что я здесь не так делаю?

Отказ от ответственности: я использую django и python в течение недели!

Ответы [ 2 ]

6 голосов
/ 19 ноября 2011

В шаблонах Django, как и в стандартном Python, использование for в словаре просто циклически перебирает ключи.Вам нужно использовать метод .items():

{% for key, value in menu.items %}
    <li class="single-link"><a href="{{ value.url }}" title="{{ value.caption }}">{{ value.caption }}</a></li>
{% endfor %}

(хотя я понимаю, что вы на самом деле не используете здесь ключ, поэтому вы можете просто использовать for value in menu.values).

ТакжеОбратите внимание, что словарь, вероятно, не является подходящим контейнером для ваших предметов в любом случае, так как вы не можете определить порядок.Как предполагает Армонж, список, вероятно, лучше.

1 голос
/ 19 ноября 2011

Вам нужно, чтобы ваше меню было списком, а не словарем

context ['menu'] = [{'url': '#', 'caption': 'test'}, {'url': '#', 'caption': 'test'}, {'url ':' # ',' caption ':' test '}]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...