Django 上下文管理器,为父模板添加动态数据
1.摘要:模板继承可以减少页面内容的重复定义,实现页面内容的重用。
但是当父模板中有动态数据的话,这些动态数据在子模版中是不会显示的。我们可以通过自定义上下文处理器来解决
2.Django上下文处理器(Context Processor)
上下文处理器是接收HttpRequest为参数并返回dict形式的数据的函数。它的主要用途是将所有模板共享的公共数据添加到上下文中,从而不必在每个视图中重复定义。
在settings.py文件中内置了多个上下文处理器:
1 TEMPLATES = [ 2 { 3 'BACKEND': 'django.template.backends.django.DjangoTemplates', 4 'DIRS': [os.path.join(BASE_DIR, 'templates')], 5 'APP_DIRS': True, 6 'OPTIONS': { 7 # 上下文处理器:context_processors 8 'context_processors': [ 9 'django.template.context_processors.debug', 10 'django.template.context_processors.request', 11 'django.contrib.auth.context_processors.auth', 12 'django.contrib.messages.context_processors.messages', 13 'django.template.context_processors.media', 14 ], 15 }, 16 }, 17 ]
每个内置处理器的功能可查看官方文档:https://docs.djangoproject.com/zh-hans/2.1/ref/templates/api/#built-in-template-context-processors
3.开始动手,定义自己的上下文处理器
3.1.在相应的app下新建py文件,如context_processors.py
3.2.定义一个函数如navigation_bar,接收request参数。
3.3.将自定义的上下文处理器添加到settings.py文件中
3.4.模板中的使用