一、介绍
Django过滤器是一种用于在Django模板中处理数据的技术。它们的主要作用是对模板中的变量进行加工、过滤或格式化,然后返回一个新的值供模板使用。这些过滤器可以在变量输出时,对输出的变量值做进一步的处理,以满足特定的显示需求。
目前Django内置的过滤器有:
- add:把add后的参数加到value上。如果是数字,则进行算术相加;如果是字符串,则进行拼接;如果是列表,则拼接成一个新列表。
- capfirst:将变量的第一个字母大写。如果第一个字符不是字母,则过滤器不会生效。
- cut:移除value中所有的与给出的变量相同的字符。
- date:根据给定格式,对一个date变量进行格式化。也可以不使用格式字符串,此时将采用默认的日期时间格式。
- default:如果value的计算结果为False,则使用给定的默认值;否则,使用该value值。
- default_if_none:与default过滤器类似,但只有当value的值是None时,才会使用默认值。
- dictsort:接收一个字典列表,并返回按参数中给出的键排序后的列表。
- dictsortreversed:与dictsort过滤器相同,但返回的值将是相反的顺序。
- first:返回列表、元组或字符串中的第一个元素。
- floatformat:使用四舍五入的方式格式化一个浮点类型。如果没有传递参数,则只在小数点后保留一位小数;如果传递了参数,则保留指定的小数位数。
- join:以指定字符串连接列表中的元素,与Python中的str.join(list)相似。
- last:返回列表、元组或字符串中的最后一个元素。
- length:返回字符串或列表的长度。对于字典,返回键的数量。如果value是None,则返回0。
- length_is:检查字符串或列表的长度是否等于给定的值。如果相等,则返回True;否则,返回False。
- linebreaks:将字符串中所有的换行符替换为HTML的段落标签<p></p>。
- linebreaksbr:将字符串中所有的换行符替换为HTML的换行标签<br />。
- linenumbers:当文本为多行时,为每行添加行号。
- lower:将字符串中的所有字母转换为小写。
- random:在给定的列表、字符串或元组中随机选择一个值。
- remove_tags:删除字符串中所有的HTML标签。注意,这不是Django的内置过滤器,但可以在某些模板库中找到类似功能的过滤器。
- safe:标记一个字符串是安全的,即关闭该字符串的自动转义。这通常用于输出HTML代码时,以避免HTML标签被转义。
- slice:类似于Python中的切片操作,返回列表或字符串的一部分。
- stringformat:格式化字符串,类似于Python的字符串格式化方法。不过,这个过滤器在Django的较新版本中可能已被弃用或替换为其他方法。
- title:将字符串中的每个单词的首字母大写。
- truncatechars:如果字符串的字符数多于指定的数目,则截断该字符串。截断的字符串将以可翻译的省略号序列(“...”)结尾。
- truncatechars_html:与truncatechars类似,但会考虑HTML标签。它不会截断HTML标签内的内容,而是会智能地截断文本内容,以避免破坏HTML结构。
- upper:将字符串中的所有字母转换为大写。
二、自定义过滤器
过滤器其实就是一个有过滤功能的函数,如果我们有一个函数:
def fmt_uname(value):
return '{}***'.format(value[0])#姓+***
如果要让他成为一个过滤器,需要加上修饰符:
from django.template.defaultfilters import register
#注册过滤器
@register.filter(name='fmt_uname')
def fmt_uname(value):
return '{}***'.format(value[0])#姓+***
这样这个fmt_uname函数就变成了一个过滤器。
在模板文件中使用过滤器:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>{{ username }}</p>
{#加载过滤器#}
{% load format_name %}
<p>{{ username | fmt_uname }}</p>
</body>
</html>
首先需要加载过滤器文件:{% load format_name %}。然后在使用过滤器:{{ username | fmt_uname }}。这句话的意思就是,对username进行过滤,使用名为fmt_uname的过滤器。
页面效果: