记录一下如何在Django视图之间共享变量--全局变量。
我这里有一个需求:菜单中的内容是变化的,如果后台增加了一个项目就要显示在菜单中。不管切换到哪个页面都应该能看到最新的项目。效果如图:

如果在每个视图中都去读取一遍项目信息那么工作量就会非常大,并且每增加一个页面就要添加对应的接口,非常麻烦还容易忘记。
解决办法就是设置一个全局变量,让这个视图自动引用这个全局变量,下面是实现步骤。
编写全局方法
def global_params(request): """全局变量,自动填充到全部视图中""" g_projects = Project.objects.all().values_list("id", "name") return {"g_projects" : g_projects}这里g_projects就是全局变量,将会被自动注入到全部视图。
在settings中引用全局变量
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'mysite.views.views.global_params', ], }, },]注意看代码'mysite.views.views.global_params',这是以上全局变量方法的python路径,所有视图都会去这个路径查找全局变量。
最后在需要的位置引用全局变量
{% for id,name in g_projects %}{{ name }} {% endfor %}至此完成了视图之间的全局变量,没有额外编写任何代码。
本文介绍如何在Django视图间共享变量,通过设置全局方法和在settings中引用,实现在多个视图中自动引用更新的全局变量,以解决动态菜单内容展示的问题,避免重复读取接口和大量代码维护。
857

被折叠的 条评论
为什么被折叠?



