django中动态导航的最佳实践?

时间:2010-02-13 07:42:56

标签: django

我的主要导航包含新闻类别,属于类别模型。我在templates/base.html中对导航进行了硬编码,但希望让它变得动态......

在我的模板中嵌入模型代码是不是一个坏主意?如果是这样我该如何拉它们?我应该将导航文件分开吗?我不仅仅依赖于类别,而且还需要一个“主页”链接,以及其他一些链接。

如果可能的话,如果我可以创建一个新的导航模型会很棒但是我不确定如何在类别表中包含新闻类别,这样它们也可以成为导航中的项目。

2 个答案:

答案 0 :(得分:6)

为什么不在inclusion tag中创建所有相关类别的数据/链接,将它们组合成一个列表,然后将其传递给包含标记的迷你模板,以便在您希望的任何页面中呈现?

例如,这样的事情(记住我不知道你当前的页面/内容是什么样的)

@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 %}

答案 1 :(得分:3)

要回答您的问题,是的,在模板中嵌入模型代码是不好的。使用预处理导航信息为每个模板(包括base.html)提供的django方法是通过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