我想为我的所有模板提供一个公共变量。我整个上午一直在努力工作,我能找到的唯一方法就是拥有这样的中间件:
class GetNameMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
return response
def process_template_response(self, request, response):
response.context_data['name'] = 'dave'
return response
并有这样的观点:
from django.template.response import TemplateResponse
from django.shortcuts import render
def home(request):
return TemplateResponse(request, 'home.html', {})
然后我可以在模板中访问它
Hello {{ name }}
我似乎有点难看,我不能再使用render
(我知道我可以做from django.template.response import TemplateResponse as render
但这不是真正的解决方案)
(Django 1.10,python 3.5.2)
答案 0 :(得分:8)
Django有一种标准的实现方式,即上下文处理器。本文提供了一个示例实现 https://www.webforefront.com/django/setupdjangocontextprocessors.html
实际上,上下文处理器只是一个接受请求对象并返回包含所需数据的dict的函数。