深入理解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 相关文章推荐
pyqt4教程之实现半透明的天气预报界面示例
Mar 02 Python
python中常用的各种数据库操作模块和连接实例
May 29 Python
python字符类型的一些方法小结
May 16 Python
django 创建过滤器的实例详解
Aug 14 Python
python基于twisted框架编写简单聊天室
Jan 02 Python
解决pandas 作图无法显示中文的问题
May 24 Python
Python自定义装饰器原理与用法实例分析
Jul 16 Python
python3.6+selenium实现操作Frame中的页面元素
Jul 16 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
Oct 14 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
May 18 Python
Django静态文件加载失败解决方案
Aug 26 Python
Python利用zhdate模块实现农历日期处理
Mar 31 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
PHP类的使用 实例代码讲解
2009/12/28 PHP
在PHP中使用反射技术的架构插件使用说明
2010/05/18 PHP
一篇有意思的技术文章php介绍篇
2010/10/26 PHP
PHP中array_map与array_column之间的关系分析
2014/08/19 PHP
php过滤HTML标签、属性等正则表达式汇总
2014/09/22 PHP
百万级别知乎用户数据抓取与分析之PHP开发
2015/09/28 PHP
既简单又安全的PHP验证码 附调用方法
2016/06/02 PHP
PHP长网址与短网址的实现方法
2017/10/13 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
基于jQuery试卷自动排版系统
2010/07/18 Javascript
JavaScript arguments 多参传值函数
2010/10/24 Javascript
jquery异步请求实例代码
2011/06/21 Javascript
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
js 调用百度地图api并在地图上进行打点添加标注
2014/05/13 Javascript
清除浏览器缓存的几种方法总结(必看)
2016/12/09 Javascript
ionic2 tabs 图标自定义实例
2017/03/08 Javascript
10个最优秀的Node.js MVC框架
2017/08/24 Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
2017/09/07 Javascript
vue watch自动检测数据变化实时渲染的方法
2018/01/16 Javascript
vue路由对不同界面进行传参及跳转的总结
2019/04/20 Javascript
前端开发之便利店收银系统代码
2019/12/27 Javascript
基于JavaScript实现表格隔行换色
2020/05/08 Javascript
python爬虫入门教程--快速理解HTTP协议(一)
2017/05/25 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
python3使用GUI统计代码量
2019/09/18 Python
django框架ModelForm组件用法详解
2019/12/11 Python
基于python3生成标签云代码解析
2020/02/18 Python
Nike台湾官方商店:Nike.com (TW)
2017/08/16 全球购物
澳大利亚婴儿礼品公司:The Baby Gift Company
2018/11/04 全球购物
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
2016/03/27 面试题
入党自我鉴定
2014/03/25 职场文书
竞选卫生委员演讲稿
2014/04/28 职场文书
部门活动策划方案
2014/08/16 职场文书
《小摄影师》教学反思
2016/02/18 职场文书
解决redis批量删除key值的问题
2022/03/23 Redis
MySql如何将查询的出来的字段进行转换
2022/06/14 MySQL