Django 4.2 复习笔记(九)使用Django的上下文处理器(context processor)

J.sky
Django
2023/6/5

web站点的上下文对于新手可能有些陌生和晦涩,这个东西有什么用?上下文就是一个变量或是函数,在整个web站点中都可以调用并获取其中定义的值。在Django中,全局上下文(Global Context)是指在每个视图中都可用的全局变量或函数,可以在模板中直接访问。Django提供了一种机制来定义全局上下文,使得这些变量或函数在所有的模板中都可以使用。

要定义全局上下文,可以使用Django的上下文处理器(context processor)。上下文处理器是一个Python函数,它接收一个HttpRequest对象作为参数,并返回一个包含上下文变量的字典。这个字典将会被添加到每个模板的上下文中。

  1. 创建一个Python文件,例如"myapp/context_processors.py"。

  2. 在文件中定义一个函数,接收一个HttpRequest对象作为参数,并返回一个包含上下文变量的字典。例如:

    def my_global_context(request): return { 'site_name': 'suiyan_blog' }

  3. 在Django的配置文件(settings.py)中找到TEMPLATES设置。在OPTIONS部分的context_processors列表中添加你的上下文处理器的路径。例如:

    TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ ... 'myapp.context_processors.my_global_context', ... ], }, }, ]

  4. 现在,你可以在任何模板中使用my_variable变量。例如,在一个模板文件中:

     <p>{{ my_variable }}</p>
    

Django的上下文可以用来定义类似博客每个页面上的站点和站长资料、分类、标签集合、底部版权信息等,这样在整个web的站点访问任何地方都可以调用,极大的方便了开发者编写开发web站点的对应功能。