深入理解Django的自定义过滤器
作者:_昭昭_ 发布时间:2021-01-25 04:01:54
前言
本文主要给大家介绍了关于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__文件内容可为空),新建文件my_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>
来源:http://www.jianshu.com/p/3f5d72929c8c


猜你喜欢
- 基本上是因为jupyter notebook的kernel所用的python和命令提示符中的python环境不一样。首先分别在cmd和jup
- 前言相信大家都知道当声明一个变量,并且没有给赋值的情况下,它的初始值是undefined。但是在javascript中,怎么检查一个值是否为
- 使用scipy.optimize模块的root和fsolve函数进行数值求解线性及非线性方程,下面直接贴上代码,代码很简单from scip
- 本文为大家分享了mysql 8.0.12 解压版安装教程,供大家参考,具体内容如下1、首先在官网上下载mysql8.0.12的压缩包:下载地
- shell=True参数会让subprocess.call接受字符串类型的变量作为命令,并调用shell去执行这个字符串,当shell=Fa
- 看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的。__slots__我们已经知道
- 什么是MD5?MD5信息摘要算法(英语:MD5 Message-Digest Agorithm),一种被广泛使用的密码散列函数,可以产生出一
- 前言:大部分的文件上传功能都是用input标签实现,这样就完全可以把它看作一个输入框,可以通过send_keys()指定文件进行上传了。本章
- 目录1、前言2、详解1、前言使用中如果我们想把python可识别对象的dict类型的数据通过str类型写入文件或者存入变量中就需要用到dum
- 前言elasticsearch-dsl是基于elasticsearch-py封装实现的,提供了更简便的操作elasticsearch的方法。
- 有时候我们需要判断某一个IP地址是否属于一个网段,以决定该用户能否访问系统.比如用户登录的IP是218.6.7.7,而我们的程序必须判断他是
- 简介 本文介绍解决SecureCRT通过SSH连接Ubuntu时vi命令有多余的m的问
- 首先必须将权重也转为Tensor的cuda格式;然后将该class_weight作为交叉熵函数对应参数的输入值。class_weight =
- 用Open() 函数打开文件打开文件的常用方法是:open(FH, "< $filename") &nb
- 今日需求其实就是把Word中的表格转到Excel中,顺便做一个调整。这个需求在实际工作中,很多人还是经常碰到的!如果单单是两个表格,那只要简
- 本文实例讲述了Python实现的维尼吉亚密码算法。分享给大家供大家参考,具体如下:一 代码# -*- coding:utf-8 -*-#ke
- 一、下载MySQL msi版本下载地址:https://dev.mysql.com/downloads/mysql/二、安装直接右击点击安装
- 本文实例讲述了Python3实现计算两个数组的交集算法。分享给大家供大家参考,具体如下:问题:给定两个数组,写一个方法来计算它们的交集。方案
- 一、mock是什么?英译中含义有:虚假的; 不诚实的; 模仿的; 模拟的 这个意思这个库的主要功能就是模拟一些事务官方解释:Mock是Pyt
- 前言:我们知道,python代码文件大多数都是py类型。那么,能不能使用txt文件存储我们的代码呢?python这么强大的语言当然可以做大,