深入理解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标准库之itertools库的使用方法
Sep 07 Python
tensorflow实现简单的卷积网络
May 24 Python
使用Python对微信好友进行数据分析
Jun 27 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
Sep 27 Python
使用Python的toolz库开始函数式编程的方法
Nov 15 Python
python实现桌面托盘气泡提示
Jul 29 Python
Django框架 Pagination分页实现代码实例
Sep 04 Python
Python基础之字符串操作常用函数集合
Feb 09 Python
Pytorch 使用不同版本的cuda的方法步骤
Apr 02 Python
django haystack实现全文检索的示例代码
Jun 24 Python
Python包资源下载路径报404解决方案
Nov 05 Python
python 中的@运算符使用
May 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
Linux下PHP安装mcrypt扩展模块笔记
2014/09/10 PHP
用js实现下载远程文件并保存在本地的脚本
2008/05/06 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
js监听键盘事件示例代码
2013/07/26 Javascript
javascript:void(0)的问题使用探讨
2014/04/10 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
2014/05/04 Javascript
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
2015/03/16 Javascript
JQuery.validate在ie8下不支持的快速解决方法
2016/05/18 Javascript
bootstrap table复杂操作代码
2016/11/01 Javascript
vue init webpack 建vue项目报错的解决方法
2018/09/29 Javascript
详解React中合并单元格的正确写法
2019/01/08 Javascript
浅谈Webpack多页应用HMR卡住问题
2019/04/24 Javascript
layui加载表格,绑定新增,编辑删除,查看按钮事件的例子
2019/09/06 Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
2019/09/10 Javascript
vue-simple-uploader上传成功之后的response获取代码
2020/09/07 Javascript
讲解python参数和作用域的使用
2013/11/01 Python
Python网络爬虫中的同步与异步示例详解
2018/02/03 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
Python使用add_subplot与subplot画子图操作示例
2018/06/01 Python
Python+OpenCV目标跟踪实现基本的运动检测
2018/07/10 Python
python 制作自定义包并安装到系统目录的方法
2018/10/27 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
2018/10/29 Python
Python3.5文件读与写操作经典实例详解
2019/05/01 Python
Python时间序列缺失值的处理方法(日期缺失填充)
2019/08/11 Python
如何在python中判断变量的类型
2020/07/29 Python
Python读写压缩文件的方法
2020/07/30 Python
泰国办公用品购物网站:OfficeMate
2018/02/04 全球购物
写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分隔
2015/07/30 面试题
优秀毕业大学生推荐信
2013/11/13 职场文书
护士演讲稿优秀范文
2014/04/30 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书
源码解读Spring-Integration执行过程
2021/06/11 Java/Android
剖析后OpLog订阅MongoDB的数据变更就没那么难了
2022/02/24 MongoDB