django创建自定义模板处理器的实例详解


Posted in Python onAugust 14, 2017

django创建自定义模板处理器:

一、需求来源:

在django开发中,页面是通过template(模板)进行渲染的,对于一些数据,可以通过{{ 变量 }}的方式进行传递。但是,如果整个网站中,或者整个网站的大部分页面都用到了一些变量或者数据,那么每次渲染的时候都传递一次这几个数据显得相当的冗余。这与django的DRY(Don't repeat yourself)思想不符,因此django提供了一种方式,让你能自定义处理器。

二、django默认的处理器:

在django开发中,django默认为你加载了四个处理器,这些处理器是django包自带的。你可以在settings.py中的TEMPLATES的OPTIONS的context_processors中找到所有django为你默认加载的处理器。
其中有包括:

'django.template.context_processors.debug',        'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',        'django.contrib.messages.context_processors.messages',

三、自定义django处理器:

建议在项目的主app下(也就是你的项目名称的app下)创建一个文件叫做context_processors.py
不管是自定义的处理器还是django自带的处理器,都是定义一个函数,这个函数带有一个request的参数,返回一个字典,用来表示模板中的参数。

比如我们要创建一个带有个人信息的处理器,格式如下:

def mycontact(request):
  return {
    'telephone': 'aaa',
    'qq': 'bbb',
    'email': 'cc@163.com'
  }

在settings.py配置文件中,找到TEMPLATES里面的context_processors,然后在后面添加你的自定义的处理器,比如我们的项目名称叫mysite,然后我把context_processors.py放到了mysite/mysite下面,也就是和settings.py同级的目录下,因此加载的路劲为mysite.context_processors.mycontact,因此,现在的context_processors中的数据如下:

'context_processors': [
  'mysite.context_processors.mycontact',
          'django.template.context_processors.debug',
          'django.template.context_processors.request',
          'django.contrib.auth.context_processors.auth',
          'django.contrib.messages.context_processors.messages',
    ]

以后你就可以在你的模板文件中,通过{{变量}}的方式引入你的变量了。

注意事项:你必须在TEMPLATES中将APP_DIRS设置为True,django才会加载你放在django的app下面的处理器。

如有疑问请留言或者到本站社区交流讨论,大家共同进步,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
python读写文件操作示例程序
Dec 02 Python
python操作xml文件详细介绍
Jun 09 Python
关于你不想知道的所有Python3 unicode特性
Nov 28 Python
在Python dataframe中出生日期转化为年龄的实现方法
Oct 20 Python
python 检查是否为中文字符串的方法
Dec 28 Python
完美解决python3.7 pip升级 拒绝访问问题
Jul 12 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
Jul 25 Python
python matplotlib 画dataframe的时间序列图实例
Nov 20 Python
PyTorch 解决Dataset和Dataloader遇到的问题
Jan 08 Python
Python如何将模块打包并发布
Aug 30 Python
Python命令行参数定义及需要注意的地方
Nov 30 Python
Python实现随机生成迷宫并自动寻路
Jun 13 Python
Python微信库:itchat的用法详解
Aug 14 #Python
Python实现的概率分布运算操作示例
Aug 14 #Python
python itchat实现微信好友头像拼接图的示例代码
Aug 14 #Python
python的mysqldb安装步骤详解
Aug 14 #Python
python制作小说爬虫实录
Aug 14 #Python
python安装Scrapy图文教程
Aug 14 #Python
基于python时间处理方法(详解)
Aug 14 #Python
You might like
PHP.MVC的模板标签系统(一)
2006/09/05 PHP
PHP下操作Linux消息队列完成进程间通信的方法
2010/07/24 PHP
PHP将DateTime对象转化为友好时间显示的实现代码
2011/09/20 PHP
jQuery+php实现ajax文件即时上传的详解
2013/06/17 PHP
PHP中的str_repeat函数在JavaScript中的实现
2013/09/16 PHP
php递归使用示例(php递归函数)
2014/02/14 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
2014/06/12 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
2014/06/23 PHP
PHP与jquery实时显示网站在线人数实例详解
2016/12/02 PHP
PHP使用curl_multi实现并发请求的方法示例
2018/04/29 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
修改jQuery.Autocomplete插件 支持中文输入法 避免TAB、ENTER键失效、导致表单提交
2009/10/11 Javascript
Jquery实现由下向上展开效果的例子
2014/12/08 Javascript
JavaScript更改字符串的大小写
2015/05/07 Javascript
Spring mvc 接收json对象
2015/12/10 Javascript
利用jquery实现实时更新歌词的方法
2017/01/06 Javascript
vue2.0实战之基础入门(1)
2017/03/27 Javascript
通过nodejs 服务器读取HTML文件渲染到页面的方法
2018/05/17 NodeJs
Vue监听事件实现计数点击依次增加的方法
2018/09/26 Javascript
Vue3.0中的monorepo管理模式的实现
2019/10/14 Javascript
[54:29]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第二场
2018/04/09 DOTA
Python采集腾讯新闻实例
2014/07/10 Python
python实现简单加密解密机制
2019/03/19 Python
Python 仅获取响应头, 不获取实体的实例
2019/08/21 Python
Python网络编程之使用TCP方式传输文件操作示例
2019/11/01 Python
python对XML文件的操作实现代码
2020/03/27 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
2020/05/10 Python
keras绘制acc和loss曲线图实例
2020/06/15 Python
深入剖析webstorage[html5的本地数据处理]
2016/07/11 HTML / CSS
L’Artisan Parfumeur官网:法国香水品牌
2020/08/11 全球购物
玲玲的画教学反思
2014/02/04 职场文书
捐书活动倡议书
2015/04/27 职场文书
反四风问题学习心得体会
2016/01/22 职场文书
2016年主题党日活动总结
2016/04/05 职场文书
Go语言操作数据库及其常规操作的示例代码
2021/04/21 Golang