深入理解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中的类学习笔记
Sep 23 Python
python生成IP段的方法
Jul 07 Python
pandas带有重复索引操作方法
Jun 08 Python
Python GUI Tkinter简单实现个性签名设计
Jun 19 Python
Tensorflow中的placeholder和feed_dict的使用
Jul 09 Python
Python地图绘制实操详解
Mar 04 Python
Python3基础教程之递归函数简单示例
Jun 07 Python
Python操作远程服务器 paramiko模块详细介绍
Aug 07 Python
django项目用higcharts统计最近七天文章点击量
Aug 17 Python
基于Python实现扑克牌面试题
Dec 11 Python
解决python web项目意外关闭,但占用端口的问题
Dec 17 Python
Python线程条件变量Condition原理解析
Jan 20 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/06/07 PHP
PHP中time(),date(),mktime()区别介绍
2013/09/28 PHP
php获取文件类型和文件信息的方法
2015/07/10 PHP
thinkPHP导出csv文件及用表格输出excel的方法
2015/12/30 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
2016/03/15 PHP
PHP+mysql实现从数据库获取下拉树功能示例
2017/01/06 PHP
PHP计算近1年的所有月份
2017/03/13 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
2019/01/10 PHP
PHP 文件写入和读取操作实例详解【必看篇】
2019/11/04 PHP
判断浏览器的javascript版本的代码
2010/09/03 Javascript
javascript利用初始化数据装配模版的实现代码
2010/11/17 Javascript
在Javascript中 声明时用&quot;var&quot;与不用&quot;var&quot;的区别
2013/04/15 Javascript
Jquery实现图片放大镜效果的思路及代码(自写)
2013/10/18 Javascript
利用jQuery实现可输入搜索文字的下拉框
2013/10/23 Javascript
javascript实现信息增删改查的方法
2015/07/25 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
2015/11/26 Javascript
JS冒泡事件与事件捕获实例详解
2016/11/25 Javascript
JS运动特效之完美运动框架实例分析
2018/01/24 Javascript
详解一个小实例理解js原型和继承
2019/04/24 Javascript
微信小程序实现同时上传多张图片
2020/02/03 Javascript
[56:12]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第一场 6.3
2018/06/04 DOTA
剖析Django中模版标签的解析与参数传递
2015/07/21 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
2018/01/05 Python
python 实现批量xls文件转csv文件的方法
2018/10/23 Python
python创建ArcGIS shape文件的实现
2019/12/06 Python
Python flask框架端口失效解决方案
2020/06/04 Python
容易被忽略的Python内置类型
2020/09/03 Python
值得收藏的HTML5资源(学习html5的朋友可以收藏下)
2010/07/20 HTML / CSS
TripAdvisor印尼站:全球领先的旅游网站
2018/03/15 全球购物
时尚设计师手表:The Watch Cabin
2018/10/06 全球购物
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
2013/02/17 面试题
2016年春节慰问信息
2015/03/25 职场文书
大学生入党自传2015
2015/06/26 职场文书
关于flex 上下文中自动 margin的问题(完整例子)
2021/05/20 HTML / CSS
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
2022/04/07 Servers