在多个页面上加载变量而不重复mys

2024-04-20 03:32:51 发布

您现在位置:Python中文网/ 问答频道 /正文

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

menu = Menu.objects.all()

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

我只需要sidebar.html中的菜单变量,所以我只需要一个文件


Tags: 文件django视图模板数据库objectsincludehtml
1条回答
网友
1楼 · 发布于 2024-04-20 03:32:51

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

例如

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

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

完成此操作后,所有模板将在其上下文中接收menu,而不会在每个视图中写入它

您可以进一步了解django上下文处理器here

相关问题 更多 >