深入理解Django的自定义过滤器

作者:_昭昭_ 时间:2021-01-25 04:01:54 

前言

本文主要给大家介绍了关于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>

来源:http://www.jianshu.com/p/3f5d72929c8c

标签:django,自定义过滤器
0
投稿

猜你喜欢

  • 使用卷积神经网络(CNN)做人脸识别的示例代码

    2023-12-31 06:25:05
  • keras自定义回调函数查看训练的loss和accuracy方式

    2021-01-11 18:13:09
  • golang编程开发使用sort排序示例详解

    2023-09-16 23:20:18
  • vscode ssh远程连接服务器的思考浅析

    2023-06-05 07:12:05
  • Mysql导入TXT文件

    2012-01-05 19:01:10
  • python imutils包基本概念及使用

    2023-10-20 21:38:09
  • Python+selenium 获取一组元素属性值的实例

    2021-06-06 02:28:27
  • 详解Python的Flask框架中生成SECRET_KEY密钥的方法

    2023-03-07 13:46:07
  • 如何理解python面向对象编程

    2023-01-01 20:19:56
  • python groupby 函数 as_index详解

    2023-09-13 21:04:07
  • 简单了解Python多态与属性运行原理

    2021-03-13 21:29:42
  • Golang Http请求返回结果处理

    2024-04-30 10:01:01
  • python定义类self用法实例解析

    2022-01-08 14:11:01
  • Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]

    2023-03-13 09:20:52
  • 解决oracle用户连接失败的解决方法

    2011-01-04 19:35:00
  • Pytorch之扩充tensor的操作

    2023-10-09 01:41:59
  • Python3.5.3下配置opencv3.2.0的操作方法

    2021-06-20 19:43:53
  • PHP之CI框架学习讲解

    2023-07-03 21:25:13
  • Python使用matplotlib.pyplot as plt绘图图层优先级问题

    2022-06-10 18:00:37
  • go redis实现滑动窗口限流的方式(redis版)

    2024-02-02 18:04:27
  • asp之家 网络编程 m.aspxhome.com