Django自定义过滤器

一、介绍

Django过滤器是一种用于在Django模板中处理数据的技术。它们的主要作用是对模板中的变量进行加工、过滤或格式化,然后返回一个新的值供模板使用。这些过滤器可以在变量输出时,对输出的变量值做进一步的处理,以满足特定的显示需求。

目前Django内置的过滤器有:

  1. add:把add后的参数加到value上。如果是数字,则进行算术相加;如果是字符串,则进行拼接;如果是列表,则拼接成一个新列表。
  2. capfirst:将变量的第一个字母大写。如果第一个字符不是字母,则过滤器不会生效。
  3. cut:移除value中所有的与给出的变量相同的字符。
  4. date:根据给定格式,对一个date变量进行格式化。也可以不使用格式字符串,此时将采用默认的日期时间格式。
  5. default:如果value的计算结果为False,则使用给定的默认值;否则,使用该value值。
  6. default_if_none:与default过滤器类似,但只有当value的值是None时,才会使用默认值。
  7. dictsort:接收一个字典列表,并返回按参数中给出的键排序后的列表。
  8. dictsortreversed:与dictsort过滤器相同,但返回的值将是相反的顺序。
  9. first:返回列表、元组或字符串中的第一个元素。
  10. floatformat:使用四舍五入的方式格式化一个浮点类型。如果没有传递参数,则只在小数点后保留一位小数;如果传递了参数,则保留指定的小数位数。
  11. join:以指定字符串连接列表中的元素,与Python中的str.join(list)相似。
  12. last:返回列表、元组或字符串中的最后一个元素。
  13. length:返回字符串或列表的长度。对于字典,返回键的数量。如果value是None,则返回0。
  14. length_is:检查字符串或列表的长度是否等于给定的值。如果相等,则返回True;否则,返回False。
  15. linebreaks:将字符串中所有的换行符替换为HTML的段落标签<p></p>。
  16. linebreaksbr:将字符串中所有的换行符替换为HTML的换行标签<br />。
  17. linenumbers:当文本为多行时,为每行添加行号。
  18. lower:将字符串中的所有字母转换为小写。
  19. random:在给定的列表、字符串或元组中随机选择一个值。
  20. remove_tags:删除字符串中所有的HTML标签。注意,这不是Django的内置过滤器,但可以在某些模板库中找到类似功能的过滤器。
  21. safe:标记一个字符串是安全的,即关闭该字符串的自动转义。这通常用于输出HTML代码时,以避免HTML标签被转义。
  22. slice:类似于Python中的切片操作,返回列表或字符串的一部分。
  23. stringformat:格式化字符串,类似于Python的字符串格式化方法。不过,这个过滤器在Django的较新版本中可能已被弃用或替换为其他方法。
  24. title:将字符串中的每个单词的首字母大写。
  25. truncatechars:如果字符串的字符数多于指定的数目,则截断该字符串。截断的字符串将以可翻译的省略号序列("...")结尾。
  26. truncatechars_html:与truncatechars类似,但会考虑HTML标签。它不会截断HTML标签内的内容,而是会智能地截断文本内容,以避免破坏HTML结构。
  27. upper:将字符串中的所有字母转换为大写。

二、自定义过滤器

过滤器其实就是一个有过滤功能的函数,如果我们有一个函数:

python 复制代码
def fmt_uname(value):
    return '{}***'.format(value[0])#姓+***

如果要让他成为一个过滤器,需要加上修饰符:

python 复制代码
from django.template.defaultfilters import register
#注册过滤器
@register.filter(name='fmt_uname')
def fmt_uname(value):
    return '{}***'.format(value[0])#姓+***

这样这个fmt_uname函数就变成了一个过滤器。

在模板文件中使用过滤器:

html 复制代码
<!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的过滤器。

页面效果:

相关推荐
幽兰的天空1 小时前
Python 中的模式匹配:深入了解 match 语句
开发语言·python
网易独家音乐人Mike Zhou4 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
安静读书4 小时前
Python解析视频FPS(帧率)、分辨率信息
python·opencv·音视频
小二·6 小时前
java基础面试题笔记(基础篇)
java·笔记·python
qq_17448285757 小时前
springboot基于微信小程序的旧衣回收系统的设计与实现
spring boot·后端·微信小程序
小喵要摸鱼7 小时前
Python 神经网络项目常用语法
python
锅包肉的九珍7 小时前
Scala的Array数组
开发语言·后端·scala
心仪悦悦7 小时前
Scala的Array(2)
开发语言·后端·scala
2401_882727578 小时前
BY组态-低代码web可视化组件
前端·后端·物联网·低代码·数学建模·前端框架
心仪悦悦8 小时前
Scala中的集合复习(1)
开发语言·后端·scala