深入理解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列表去重的二种方法
Feb 14 Python
python实现socket客户端和服务端简单示例
Feb 24 Python
Python实现股市信息下载的方法
Jun 15 Python
Python开发如何在ubuntu 15.10 上配置vim
Jan 25 Python
python使用paramiko实现远程拷贝文件的方法
Apr 18 Python
python实现稀疏矩阵示例代码
Jun 09 Python
详解Python3.6安装psutil模块和功能简介
May 30 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
Sep 04 Python
Python重新加载模块的实现方法
Oct 16 Python
python如何提取英语pdf内容并翻译
Mar 03 Python
Django 自定义404 500等错误页面的实现
Mar 08 Python
pyqt5打包成exe可执行文件的方法
May 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设计模式 php实现门面模式(Facade)
2015/12/07 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
2015/12/31 PHP
jquery表单验证使用插件formValidator
2012/11/10 Javascript
jQuery响应鼠标事件并隐藏与显示input默认值
2014/08/24 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
2016/10/09 Javascript
给easyui datebox扩展一个清空的实例
2016/11/09 Javascript
jquery实现(textarea)placeholder自动换行
2016/12/22 Javascript
用JavaScript实现让浏览器停止载入页面的方法
2017/01/19 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
2017/02/22 Javascript
关于vue-router路径计算问题
2017/05/10 Javascript
vue 如何添加全局函数或全局变量以及单页面的title设置总结
2017/06/01 Javascript
jQuery实现输入框的放大和缩小功能示例
2018/07/21 jQuery
浅谈微信JS-SDK 微信分享接口开发(介绍版)
2018/08/15 Javascript
JS实现的简单分页功能示例
2018/08/23 Javascript
jQuery实现的自定义轮播图功能详解
2018/12/28 jQuery
基于axios 的responseType类型的设置方法
2019/10/29 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
2020/05/19 jQuery
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
JS中箭头函数与this的写法和理解
2021/01/14 Javascript
[02:42]DOTA2城市挑战赛收官在即 四强之争风起云涌
2018/06/05 DOTA
教你如何在Django 1.6中正确使用 Signal
2014/06/22 Python
在Python的Django框架中获取单个对象数据的简单方法
2015/07/17 Python
Python Learning 列表的更多操作及示例代码
2018/08/22 Python
pytorch1.0中torch.nn.Conv2d用法详解
2020/01/10 Python
你应该知道的Python3.6、3.7、3.8新特性小结
2020/05/12 Python
python爬虫爬取图片的简单代码
2021/01/18 Python
10个很棒的 CSS3 开发工具 推荐
2011/05/16 HTML / CSS
HTML 5.1来了 9月份正式发布 更新内容预览
2016/04/26 HTML / CSS
美国木工工具和用品商店:Woodcraft
2019/10/30 全球购物
综合办公室个人的自我评价
2013/12/22 职场文书
写演讲稿所需要注意的4个条件
2014/01/09 职场文书
教师个人自我评价范文
2014/04/13 职场文书
志愿者活动总结范文
2014/04/26 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
python常见的占位符总结及用法
2021/07/02 Python