django 自定义 Context Processors

作者 Yingying Zheng 日期 2017-07-31
django 自定义 Context Processors

Django的Settings 有个配置 TEMPLATE_CONTEXT_PROCESSORS,一般它担任对我们的模板页面与环境进行处理解析的过程,可用于模版参数的定义,常用于定义全局参数等;

因为当前所开发的系统中,大多都有 所有视图使用公用变量的情况,所以研究下 模版自定义context_processors,用来提高效率,以及代码的可读性

环境

python2.7

django1.9.2

目标

写一个自定义context_processors,用来每个view展示当前系统时间

步骤

1.自定义函数
在模块下创建context_processors.py

1
2
3
4
5
6
7
8
9
#!/usr/bin/python
#coding=utf8
import datetime
# 注意:这里只有一个参数 即 HttpRequest 对象或当前用户的其他信息
def current_time(request):
data = {}
data['currenttime'] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
return data

2.修改配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates'),],
'APP_DIRS': False,
'OPTIONS': {
'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.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.core.context_processors.request',
#添加新创建的文件
'apps.context_processors.current_time'
],
'loaders': [
# insert your TEMPLATE_LOADERS here
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
]
},
},
]

3.测试

1
2
3
4
5
6
7
8
9
#!/usr/bin/python
#coding=utf8
from django.views.generic import TemplateView
class TestView(TemplateView):
template_name = "app/test.html"
1
2
3
4
5
6
7
8
9
10
11
12
13
<div class="row">
<div class="col-lg-12">
<div class="ibox float-e-margins">
<div class="ibox-content">
<div class="row">
<div class="col-sm-1">
{{currenttime}}
</div>
</div>
</div>
</div>
</div>
</div>