欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Django模板继承下的动态数据传递—上下文处理器

程序员文章站 2022-06-23 22:37:04
参考:http://www.caodahua.cn/detail/3/ 模板继承可以减少页面内容的重复定义,实现页面内容的重用。我的个人博客右侧的导航栏都是继承base页面从而让代码得到最大程度的复用。但是当父模板中有动态数据的话,这些动态数据在子模版中是不会显示的。我们可以通过自定义上下文处理器来 ......

参考:

 

模板继承可以减少页面内容的重复定义,实现页面内容的重用。我的个人博客右侧的导航栏都是继承base页面从而让代码得到最大程度的复用。但是当父模板中有动态数据的话,这些动态数据在子模版中是不会显示的。我们可以通过自定义上下文处理器来解决。

 

django上下文处理器(context processor)

上下文处理器是接收httprequest为参数并返回dict形式的数据的函数。它的主要用途是将所有模板共享的公共数据添加到上下文中,从而不必在每个视图中重复定义。

在settings.py文件中内置了多个上下文处理器:

templates = [
    {
        'backend': 'django.template.backends.django.djangotemplates',
        'dirs': [os.path.join(base_dir, 'templates')],
        'app_dirs': true,
        'options': {
            # 上下文处理器:context_processors
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'django.template.context_processors.media',
            ],
        },
    },
]

每个内置处理器的功能可查看官方文档:

开始动手,定义自己的上下文处理器

1.在相应的app下新建py文件,如context_processors.py

Django模板继承下的动态数据传递—上下文处理器

2.定义一个函数如navigation_bar,接收request参数。

Django模板继承下的动态数据传递—上下文处理器

函数里写上处理动态数据的代码。

3.将自定义的上下文处理器添加到settings.py文件中

Django模板继承下的动态数据传递—上下文处理器

直接添加即可。

4.模板中的使用

{% for article in hot_articles %}
    ...
{% endfor %}