在许多页面上加载变量而无需重复我自己

时间:2018-10-08 15:22:11

标签: python django

在Django中,我有一个侧边栏导航菜单,该菜单具有其自己的包含文件(我们称其为sidebar.html)。在sidebar.html中,有时 会加载一个特殊菜单,具体取决于我访问的页面。这个特殊的菜单是从数据库生成的,因此我需要在视图中运行类似的内容:

menu = Menu.objects.all()

然后,我需要将此变量传递给模板。但是,大约有30页需要此菜单。在我的视图文件中重复上述行30次似乎是一个重复的解决方案。有更好的方法吗?

我只需要sidebar.html中的menu变量,所以我只需要1个文件。

1 个答案:

答案 0 :(得分:3)

一种方法是创建一个上下文处理器(该处理器将项目添加到所有请求的上下文中),以将菜单添加到上下文中。

例如

c = RequestContext(request, {
    'menu': Menu.objects.all()
})

然后将其添加到context_processors中的settings.py

这样做之后,所有模板都将在其上下文中收到menu,而无需在每个视图中都编写它。

您可以了解有关Django上下文处理器here

的更多信息