开发者社区> 木子昭> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

详解Django自定义过滤器

简介: 过滤器与函数 django过滤器的本质是函数,但"函数"太多了,为了显示自己的与众不同,设计者们想了个名字"过滤器"... django有一些内置的过滤器,但和"新手赛车"不多(把字母转成小写,求数组长度,从数组中取一个随机值),功能很基础(不够强大).
+关注继续查看
过滤器与函数

django过滤器的本质是函数,但"函数"太多了,为了显示自己的与众不同,设计者们想了个名字"过滤器"...

django有一些内置的过滤器,但和"新手赛车"不多(把字母转成小写,求数组长度,从数组中取一个随机值),功能很基础(不够强大)...

抱着一种"研究琢磨"的心态,试着自己动手写一个过滤器:功能很简单,求一个数组中的最大值(今天太晚了,偷个懒哈~)

功能是很简单的:

过滤器

先给出我的一点体会:

在django是MVP的架构,数据模型交给Model,逻辑处理交给View,样式模板交给temPlate,这是公认的合理架构.

随着项目规模的增大,会出现一些问题,view掌管了所有的逻辑处理,一些很基础的逻辑功能(比如求最大值,最小值,给用户名加个前缀)是没必要与核心逻辑放在一起的,不仅让代码显得冗余,而且也影响核心模块的迭代维护...

所以django的设计者,决定把一些很基础通用的逻辑模块单独取出,放到app目录下的templatetags文件夹内(文件夹名字不可改,否则会django会无法识别),templatetags可以存放多个文件,每个文件可以存放多个功能相关的过滤器,使用功能相关的过滤器时,直接导入单个文件就可以一并使用相关功能,不愧是django,框架设计真的很赞!

具体使用规则:

1.如果对某个app下的网页使用过滤器,则在对应app的根目录下,创建名为templatetags的文件夹(这里的pad为一个独立的app)

新建目录

2.在templatetags文件夹下,新建空文件__init__.py(这是python的规矩,__init__.py表示其所在的文件夹是一个可以载入的模块,__init__文件内容可为空),新建文件zhao_filter.py(这个文件可以存放多个过滤器,文件名字可自定义...)

新建文件

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>

有时候测试服务器会抽风,找不到过滤器,此时删除__init__.py,再重新创建__init__.py即可!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python Django 编程 | 连载 04 - Django 模板
Python Django 编程 | 连载 04 - Django 模板
14 0
【Django学习笔记 - 11】:模板的继承、模型类和数据库
【Django学习笔记 - 11】:模板的继承、模型类和数据库
20 0
【Django学习笔记 - 10】:模板与模板语法
【Django学习笔记 - 10】:模板与模板语法
18 0
Python编程:关闭Django模板的自动转义
Python编程:关闭Django模板的自动转义
7 0
Python编程:Django自定义模板标签
Python编程:Django自定义模板标签
15 0
Python网站开发必备-django模板自定义标签
Python网站开发必备-django模板自定义标签
14 0
08.Django自定义模板,自定义标签和自定义过滤器
一:自定义模板 模板继承我们可以简单的理解为类的继承,其实他们有很大的相似之处,定义一个基类模板,我们便可以在子页面中进行引用,django中模板中的块用block进行标示,他属于django自定义的tag 例如:我们定义了一个基类的模板base.
1057 0
+关注
木子昭
# 专注极客体验 # 享受效率生活 --- 让程序去做呗~ 程序又不会累~
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载