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

作者:J.sky · 发表于:
2023-06-05T08:34:17.000000Z
· 更新于:
2023-08-13T22:54:57.613618Z
· Tag: Django

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'
        }

  1. 在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',
                    ...
                ],
            },
        },
    ]

  1. 现在,你可以在任何模板中使用my_variable变量。例如,在一个模板文件中:
    <p>{{ my_variable }}</p>
    

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