深入理解Django的自定义过滤器


Posted in Python onOctober 17, 2017

前言

本文主要给大家介绍了关于Django自定义过滤器的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:

深入理解Django的自定义过滤器

过滤器与函数

django过滤器的本质是函数,但"函数"太多了,为了显示自己的与众不同,设计者们想了个名字"过滤器"...

django有一些内置的过滤器,但和"新手赛车"不多(把字母转成小写,求数组长度,从数组中取一个随机值),功能很基础(不够强大)...

抱着一种"研究琢磨"的心态,试着自己动手写一个过滤器:功能很简单,求一个数组中的最大值(今天太晚了,偷个懒哈~)

功能是很简单的:

深入理解Django的自定义过滤器
过滤器

先给出我的一点体会:

在django是MVP的架构,数据模型交给Model,逻辑处理交给View,样式模板交给temPlate,这是公认的合理架构.

随着项目规模的增大,会出现一些问题,view掌管了所有的逻辑处理,一些很基础的逻辑功能(比如求最大值,最小值,给用户名加个前缀)是没必要与核心逻辑放在一起的,不仅让代码显得冗余,而且也影响核心模块的迭代维护...

所以django的设计者,决定把一些很基础通用的逻辑模块单独取出,放到app目录下的templatetags文件夹内(文件夹名字不可改,否则会django会无法识别),templatetags可以存放多个文件,每个文件可以存放多个功能相关的过滤器,使用功能相关的过滤器时,直接导入单个文件就可以一并使用相关功能,不愧是django,框架设计真的很赞!

具体使用规则:

1.如果对某个app下的网页使用过滤器,则在对应app的根目录下,创建名为templatetags的文件夹(这里的pad为一个独立的app)

深入理解Django的自定义过滤器
新建目录

2.在templatetags文件夹下,新建空文件__init__.py(这是python的规矩,__init__.py表示其所在的文件夹是一个可以载入的模块,__init__文件内容可为空),新建文件my_filter.py(这个文件可以存放多个过滤器,文件名字可自定义...)

深入理解Django的自定义过滤器
新建文件

3.在my_filter.py中,先导入头文件,编写过滤器函数(这里偷个懒,直接用python的内置函数做示范),注册过滤器(还是喜欢装饰器);

from django.template import Library

# 将注册类实例化为register对象
register = Library()


# 使用装饰器注册
@register.filter
def get_list_max(val):
 # val为一个列表,通过过滤器取得其中的最大值
 result = max(val)

 return result

4.将过滤器加载到html, 使用自定义的过滤器

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>过滤器</title>
</head>
<body>

{# 加载过滤器所在的文件,由于templatetags的文件名是固定的,django可以直接找到过滤器文件所在的位置 #}
{% load zhao_fillter %}


{# 显示列表数据 #}
列表的数据为:{{ my_list }}

<hr>

{# 使用自定义的过滤器get_list_max,获得列表中最大的值 #}
列表中的最大值为:{{ my_list | get_list_max }}

</body>
</html>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python通过递归遍历出集合中所有元素的方法
Feb 25 Python
Django组件之cookie与session的使用方法
Jan 10 Python
python日期相关操作实例小结
Jun 24 Python
在交互式环境中执行Python程序过程详解
Jul 12 Python
Pandas分组与排序的实现
Jul 23 Python
python框架flask表单实现详解
Nov 04 Python
pycharm内无法import已安装的模块问题解决
Feb 12 Python
Python实现计算图像RGB均值方式
Jun 04 Python
Python判断变量是否是None写法代码实例
Oct 09 Python
Python基于Faker假数据构造库
Nov 30 Python
详解BeautifulSoup获取特定标签下内容的方法
Dec 07 Python
Python matplotlib 利用随机函数生成变化图形
Apr 26 Python
Python引用类型和值类型的区别与使用解析
Oct 17 #Python
利用python批量修改word文件名的方法示例
Oct 17 #Python
Django内容增加富文本功能的实例
Oct 17 #Python
Python通过future处理并发问题
Oct 17 #Python
python3设计模式之简单工厂模式
Oct 17 #Python
基于Python和Scikit-Learn的机器学习探索
Oct 16 #Python
python版简单工厂模式
Oct 16 #Python
You might like
给多个地址发邮件的类
2006/10/09 PHP
php 删除无限级目录与文件代码共享
2008/11/22 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
2015/12/21 PHP
完美利用Yii2微信后台开发的系列总结
2016/07/18 PHP
php 使用curl模拟ip和来源进行访问的实现方法
2017/05/02 PHP
JS模拟多线程
2007/02/07 Javascript
jQuery 表格插件整理
2010/04/27 Javascript
用jquery实现自定义风格的滑动条实现代码
2011/04/26 Javascript
重写javascript中window.confirm的行为
2012/10/21 Javascript
JavaScript中用sort()方法对数组元素进行排序的操作
2015/06/09 Javascript
confirm确认对话框的实现方法总结
2016/06/17 Javascript
JS中this上下文对象使用方式
2016/10/09 Javascript
浅谈JS中String()与 .toString()的区别
2016/10/20 Javascript
jQuery设置Easyui校验规则(推荐)
2016/11/21 Javascript
使用nodejs下载风景壁纸
2017/02/05 NodeJs
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
详解用vue-cli来搭建vue项目和webpack
2017/04/20 Javascript
jQuery 控制文本框自动缩小字体填充
2017/06/16 jQuery
微信小程序开发之改变data中数组或对象的某一属性值
2018/07/05 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
2020/07/22 Javascript
[04:37]DOTA2英雄梦之声Vol20发条
2014/06/20 DOTA
Anaconda下配置python+opencv+contribx的实例讲解
2018/08/06 Python
详解python metaclass(元类)
2020/08/13 Python
利用HTML5中Geolocation获取地理位置调用Google Map API在Google Map上定位
2013/01/23 HTML / CSS
澳大利亚排名第一的儿童在线玩具商店:Toy Galaxy
2018/10/06 全球购物
日本著名化妆品零售网站:Cosme Land
2019/03/01 全球购物
信息管理员岗位职责
2013/12/01 职场文书
工商企业管理实习自我鉴定
2013/12/04 职场文书
知名企业招聘广告词大全
2014/03/18 职场文书
幼儿教师师德演讲稿
2014/05/06 职场文书
2015年大班保育员工作总结
2015/05/18 职场文书
家属联谊会致辞
2015/07/31 职场文书
长辈生日祝福语大全(72句)
2019/08/09 职场文书
2019年消防宣传标语集锦
2019/11/21 职场文书
IDEA使用SpringAssistant插件创建SpringCloud项目
2021/06/23 Java/Android
Valheim服务器 Mod修改安装教程 【ValheimPlus】
2022/12/24 Servers