深入理解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通过ElementTree操作XML获取结点读取属性美化XML
Dec 02 Python
Python入门篇之文件
Oct 20 Python
Python2.x与Python3.x的区别
Jan 14 Python
Python编程实现正则删除命令功能
Aug 30 Python
python的paramiko模块实现远程控制和传输示例
Oct 13 Python
Python2与python3中 for 循环语句基础与实例分析
Nov 20 Python
用Python实现数据的透视表的方法
Nov 16 Python
基于Python函数和变量名解析
Jul 19 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
Aug 17 Python
python二维键值数组生成转json的例子
Dec 06 Python
Python页面加载的等待方式总结
Feb 28 Python
Python Matplotlib绘制等高线图与渐变色扇形图
Apr 14 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基础知识:类与对象(1)
2006/12/13 PHP
ThinkPHP实现二级循环读取的方法
2014/11/03 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
2016/03/01 PHP
PHP进阶学习之类的自动加载机制原理分析
2019/06/18 PHP
JavaScript入门教程(11) js事件处理
2009/01/31 Javascript
往光标所在位置插入值的js代码
2013/09/22 Javascript
原生js获取宽高与jquery获取宽高的方法关系对比
2014/04/04 Javascript
jquery和css3实现的炫酷时尚的菜单导航
2014/09/01 Javascript
jQuery对象的length属性用法实例
2014/12/27 Javascript
全面了解javascript三元运算符
2016/06/27 Javascript
JS代码实现百度地图 画圆 删除标注
2016/10/12 Javascript
基于jQuery实现Accordion手风琴自定义插件
2020/10/13 Javascript
创建Vue项目以及引入Iview的方法示例
2018/12/03 Javascript
微信小程序实现的图片保存功能示例
2019/04/24 Javascript
jQuery轮播图功能制作方法详解
2019/12/03 jQuery
在Chrome DevTools中调试JavaScript的实现
2020/04/07 Javascript
js实现炫酷光感效果
2020/09/05 Javascript
原生js实现滑块区间组件
2021/01/20 Javascript
Python实现的排列组合计算操作示例
2017/10/13 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
2018/03/31 Python
关于python字符串方法分类详解
2019/08/20 Python
Python搭建代理IP池实现接口设置与整体调度
2019/10/27 Python
django xadmin中form_layout添加字段显示方式
2020/03/30 Python
keras实现多GPU或指定GPU的使用介绍
2020/06/17 Python
Tensorflow全局设置可见GPU编号操作
2020/06/30 Python
时尚的CSS3进度条效果
2012/02/22 HTML / CSS
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
美国高级工作服品牌:Carhartt
2018/01/25 全球购物
项目资料员岗位职责
2013/12/10 职场文书
公务员试用期满考核材料
2014/05/22 职场文书
活动总结结尾怎么写
2014/08/30 职场文书
公司给客户的感谢信
2015/01/23 职场文书
2015年税务稽查工作总结
2015/05/26 职场文书
公司年会主持词范文!
2019/05/07 职场文书
js实现模拟购物商城案例
2021/05/18 Javascript
你需要掌握的20个Python常用技巧
2022/02/28 Python