在Django中为您的模板提供全局变量

时间:2016-12-01 14:59:29

标签: python django

我想为我的所有模板提供一个公共变量。我整个上午一直在努力工作,我能找到的唯一方法就是拥有这样的中间件:

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)

1 个答案:

答案 0 :(得分:8)

Django有一种标准的实现方式,即上下文处理器。本文提供了一个示例实现 https://www.webforefront.com/django/setupdjangocontextprocessors.html

实际上,上下文处理器只是一个接受请求对象并返回包含所需数据的dict的函数。