深入理解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流程控制语句
Dec 04 Python
详解django中自定义标签和过滤器
Jul 03 Python
Python探索之ModelForm代码详解
Oct 26 Python
使用Python读取二进制文件的实例讲解
Jul 09 Python
浅谈解除装饰器作用(python3新增)
Oct 15 Python
python 二维数组90度旋转的方法
Jan 28 Python
详解python statistics模块及函数用法
Oct 27 Python
Python定义函数时参数有默认值问题解决
Dec 19 Python
python中有关时间日期格式转换问题
Dec 25 Python
Python解析多帧dicom数据详解
Jan 13 Python
ubuntu 安装pyqt5和卸载pyQt5的方法
Mar 24 Python
如何表示python中的相对路径
Jul 08 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的ajax框架xajax入门与试用介绍
2010/12/19 PHP
PHP+MYSQL会员系统的开发实例教程
2014/08/23 PHP
php利用smtp类实现电子邮件发送
2015/10/30 PHP
精通Javascript系列之Javascript基础篇
2011/06/07 Javascript
jQuery监控文本框事件并作相应处理的方法
2015/04/16 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
微信小程序  网络请求API详解
2016/10/25 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
Vue.js项目模板搭建图文教程
2017/09/20 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
js实现二级菜单点击显示当前内容效果
2018/04/28 Javascript
深入理解react-router 路由的实现原理
2018/09/26 Javascript
layDate插件设置开始和结束时间
2018/11/15 Javascript
jQuery中DOM操作原则实例分析
2019/08/01 jQuery
node crawler如何添加promise支持
2020/02/01 Javascript
在Vue中实现随hash改变响应菜单高亮
2020/03/09 Javascript
js实现页面图片消除效果
2020/03/24 Javascript
Vue发布订阅模式实现过程图解
2020/04/30 Javascript
Python实现的Kmeans++算法实例
2014/04/26 Python
详解supervisor使用教程
2017/11/21 Python
Python 实现一行输入多个值的方法
2018/04/21 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
django数据关系一对多、多对多模型、自关联的建立
2019/07/24 Python
django中related_name的用法说明
2020/05/20 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
2020/05/26 Python
Python检测端口IP字符串是否合法
2020/06/05 Python
如何快速一次性卸载所有python包(第三方库)呢
2020/10/20 Python
C语言中一个结构不能包含指向自己的指针吗
2012/05/25 面试题
怎样从/向数据文件读/写结构
2014/11/23 面试题
领导干部整治奢华浪费之风思想汇报
2014/10/07 职场文书
2014年预算员工作总结
2014/12/05 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
同学聚会通知书
2015/04/20 职场文书
Jupyter notebook 不自动弹出网页的解决方案
2021/05/21 Python
详解Java ES多节点任务的高效分发与收集实现
2021/06/30 Java/Android
不负正版帝国之名 《重返帝国》引领SLG手游制作新的标杆
2022/04/07 其他游戏