在Django中,我有一个侧边栏导航菜单,该菜单具有其自己的包含文件(我们称其为sidebar.html)。在sidebar.html中,有时 会加载一个特殊菜单,具体取决于我访问的页面。这个特殊的菜单是从数据库生成的,因此我需要在视图中运行类似的内容:
menu = Menu.objects.all()
然后,我需要将此变量传递给模板。但是,大约有30页需要此菜单。在我的视图文件中重复上述行30次似乎是一个重复的解决方案。有更好的方法吗?
我只需要sidebar.html中的menu变量,所以我只需要1个文件。
答案 0 :(得分:3)
一种方法是创建一个上下文处理器(该处理器将项目添加到所有请求的上下文中),以将菜单添加到上下文中。
例如
c = RequestContext(request, {
'menu': Menu.objects.all()
})
然后将其添加到context_processors
中的settings.py
这样做之后,所有模板都将在其上下文中收到menu
,而无需在每个视图中都编写它。
您可以了解有关Django上下文处理器here
的更多信息