输出是输入的反馈,只有输入和输出贯通,才能够创造健康的学习系统。
序言
转换器和过滤器是django中的基本功能,虽然已经内置了一些常用的类型,但是,因为网页开发复杂的生产环境,往往并不能够满足需求,在这个时候,就需要自定义转换器和过滤器。本文会首先介绍定义,应用和自定义转换器,适合没有经验的小白来学习。
转换器
简介
转换器是在Django中用来控制参数输入的一个函数,英文名称是converter。应用场景有:
内置转换器
(1)int:非空字符串,默认的转换器。不包括斜杠。
(2)str:匹配任意的0或者整型。
(3)slug:包括“-”,“_”,以及任意的英文字符和数字
(4)uuid:符合uuid匹配规则的
(5)path:匹配非空英文字符串,可以包含斜杠。
自定义转换器的过程:
(1)定义一个类别
(2)在类别定义一个属性,regex,用来保存定义的正则表达式。
(3)实现to_python(self,value)这个方法,将URL中的值变换后输入到视图函数
(3)实现to_urls(self,value)这个方法,将视图函数转换后传递到URL中
(5)将定义好的转换器,注册到Django中,通过如下语法:
from django.urls import redister_converter
register_converter("类名",使用的简化名字)
(6)可以使用定义成功的转换器。
过滤器
定义
过滤器主要在template中使用,作用是用来处理数据,类似于Python语法中的函数。过滤器使用|分割。
常用过滤器
add,cut,date,default,default_if_none,first,last,floatformat,join,length,lower,upper,random,safe,slice,stringtags,truncatechars,truncatechars_html,
自定义过滤器
1.在app下创建一个Python包templatetags,安装APP到installed的APP中。
2.创建过滤器文件:
from django import template
# 创建模板库对象
register = template.Library()
# 过滤器函数
def mycut(value,mystr):
return value.replace(mystr)
# 将函数注册到模板库中
register.filter("mycut",mycut)
(2*)为了更加方便的将函数注册到模版库中当作过滤器。也可以使用装饰器来将一个函数包装成过滤
器。示例代码如下:
from django import template
register = template.Library()
@register.filter(name='mycut')——(name是为过滤器命名,可以方便修改过滤器的名字)
def mycut(value,mystr):
return value.replace(mystr,"")
(3)以后想要在模板中使用这个过滤器,就要在模板中 load 一下这个过滤器所在的模块的名字