深入理解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脚本来实现最简单的FTP下载的教程
May 04 Python
python脚本爬取字体文件的实现方法
Apr 29 Python
Python中的__slots__示例详解
Jul 06 Python
Python(Django)项目与Apache的管理交互的方法
May 16 Python
Python3爬虫之自动查询天气并实现语音播报
Feb 21 Python
Python基于机器学习方法实现的电影推荐系统实例详解
Jun 25 Python
通过cmd进入python的实例操作
Jun 26 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
Apr 09 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
May 22 Python
用python实现名片管理系统
Jun 18 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
Aug 07 Python
python turtle绘图
May 04 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
上海永华YH-R296(华普R-96)12波段立体声收音机的分析和打理
2021/03/02 无线电
php获取参数的几种方法总结
2014/02/18 PHP
php的dl函数用法实例
2014/11/06 PHP
PHP命名空间namespace用法实例分析
2016/09/27 PHP
通过实例解析PHP数据类型转换方法
2020/07/11 PHP
AJAX架构之Dojo篇
2007/04/10 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
JS继承--原型链继承和类式继承
2013/04/08 Javascript
jquery ajax 简单范例(界面+后台)
2013/11/19 Javascript
深入理解JavaScript系列(29):设计模式之装饰者模式详解
2015/03/03 Javascript
JavaScript中的parse()方法使用简介
2015/06/12 Javascript
js变形金刚文字特效代码分享
2015/08/20 Javascript
js简单判断移动端系统的方法
2016/02/25 Javascript
Js动态设置rem来实现移动端字体的自适应代码
2016/10/14 Javascript
解决vue-router在同一个路由下切换,取不到变化的路由参数问题
2018/09/01 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
2019/08/27 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
2020/09/07 Javascript
es5 类与es6中class的区别小结
2020/11/09 Javascript
Python获取运行目录与当前脚本目录的方法
2015/06/01 Python
Python读取sqlite数据库文件的方法分析
2017/08/07 Python
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
Python爬取十篇新闻统计TF-IDF
2018/01/03 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
2018/04/21 Python
Python selenium实现微博自动登录的示例代码
2018/05/16 Python
可能是最全面的 Python 字符串拼接总结【收藏】
2018/07/09 Python
Django框架实现分页显示内容的方法详解
2019/05/10 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
2020/02/17 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
2020/02/26 Python
Python 格式化打印json数据方法(展开状态)
2020/02/27 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
前端制作动画的几种方式(css3,js)
2016/12/12 HTML / CSS
事业单位考核材料
2014/05/21 职场文书
乡镇精神文明建设汇报材料
2014/08/15 职场文书
js中Object.create实例用法详解
2021/10/05 Javascript
vue+echarts实现多条折线图
2022/03/21 Vue.js
浅析JavaScript中的变量提升
2022/06/01 Javascript