Лучшие практики для динамической навигации в Django? - PullRequest
4 голосов
/ 13 февраля 2010

Моя основная навигация состоит из категорий новостей, которые относятся к модели категорий. Я жестко закодировал навигацию в templates/base.html, но хочу сделать ее динамичной ...

Является ли плохой идеей встраивать код модели в мой шаблон? Если так, как я должен потянуть их? Должен ли я сделать отдельный файл nav? И я буду полагаться не только на категории, но и на домашнюю ссылку, а также на некоторые другие ссылки.

Если возможно, было бы здорово, если бы я мог создать новую модель навигации, но я не уверен, как я смогу включить категории новостей из таблицы категорий, чтобы они также могли быть элементами в навигации.

Ответы [ 2 ]

6 голосов
/ 13 февраля 2010

Почему бы не создать в тег включения , где вы соберете вместе все данные / ссылки соответствующих категорий, превратите их в список, а затем передадите его в мини-шаблон тега включения для отображения на любой странице, которую хотите

например, что-то вроде этого (имея в виду, я понятия не имею, как выглядит ваша текущая страница / контент)

@register.inclusion_tag('/path/to/templates/my_nav_inclusion_tag.html')
def my_nav_inclusion_tag()
  #create your base link and add it to the list of links
  links = [['Home', '/']]

  for all the categories you want to add: 
  # (It's up to you to decide how to wrangle your categories into shape)
    links.append([category_name, category_url])

  return {'links':links}

В шаблоне тега включения (my_nav_inclusion_tag.html) попробуйте что-то вроде:

{% for link in links %}
   <a href="{{link.1}}">{{link.0}}</a> 
{% endfor %}

И в любых шаблонах, в которых вам нужно показать навигацию, просто вызовите тег включения, например:

{% my_nav_inclusion_tag %}
3 голосов
/ 13 февраля 2010

Чтобы ответить на ваш вопрос, да, плохо встраивать код модели в ваш шаблон. Django способ сделать вашу предварительно обработанную навигационную информацию доступной для каждого шаблона (включая base.html) через RequestContext.

http://docs.djangoproject.com/en/1.1/ref/templates/api/#id1

http://docs.djangoproject.com/en/1.1/ref/settings/#setting-TEMPLATE_CONTEXT_PROCESSORS

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