深入理解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 相关文章推荐
wxPython事件驱动实例详解
Sep 28 Python
Pyhthon中使用compileall模块编译源文件为pyc文件
Apr 28 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
Apr 19 Python
python简易远程控制单线程版
Jun 20 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
Sep 13 Python
python广度优先搜索得到两点间最短路径
Jan 17 Python
Python实现FM算法解析
Jun 18 Python
基于Python获取docx/doc文件内容代码解析
Feb 17 Python
Python try except异常捕获机制原理解析
Apr 18 Python
Flask搭建一个API服务器的步骤
May 28 Python
忆童年!用Python实现愤怒的小鸟游戏
Jun 07 Python
Python获取字典中某个key的value
Apr 13 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 地区分类排序算法
2013/07/01 PHP
php保存二进制原始数据为图片的程序代码
2014/10/14 PHP
php使用socket post数据到其它web服务器的方法
2015/06/02 PHP
PHP滚动日志的代码实现
2015/06/10 PHP
利用PHP如何实现Socket服务器
2015/09/23 PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
2016/06/21 PHP
thinkPHP5实现数据库添加内容的方法
2017/10/25 PHP
分析php://output和php://stdout的区别
2018/05/06 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
Javascript模板技术
2007/04/27 Javascript
javascript简单事件处理和with用法介绍
2013/09/16 Javascript
js+CSS实现弹出居中背景半透明div层的方法
2015/02/26 Javascript
javascript实现可全选、反选及删除表格的方法
2015/05/15 Javascript
Backbone.js的Hello World程序实例
2015/06/19 Javascript
基于jQuery实现简单人工智能聊天室
2017/02/10 Javascript
vue+node+webpack环境搭建教程
2017/11/05 Javascript
weebox弹出窗口不居中显示的解决方法
2017/11/27 Javascript
nodeJS微信分享
2017/12/20 NodeJs
React 无状态组件(Stateless Component) 与高阶组件
2018/08/14 Javascript
jQuery实现的响应鼠标移动方向插件用法示例【附源码下载】
2018/08/28 jQuery
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
简单了解Vue computed属性及watch区别
2020/07/10 Javascript
详解python中requirements.txt的一切
2017/03/03 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
2017/11/30 Python
python浪漫表白源码
2019/04/05 Python
使用Python画股票的K线图的方法步骤
2019/06/28 Python
win8.1安装Python 2.7版环境图文详解
2019/07/01 Python
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
TripAdvisor土耳其网站:全球知名旅行社区,真实旅客评论
2017/04/17 全球购物
任意存:BOXFUL
2018/05/21 全球购物
初中班主任经验交流材料
2014/05/16 职场文书
销售团队获奖感言
2014/08/14 职场文书
三年级学生期末评语
2014/12/26 职场文书
环境卫生整治简报
2015/07/20 职场文书
2016年校园植树节广播稿
2015/12/17 职场文书
小学生优秀作文范文(六篇)
2019/07/10 职场文书