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的过滤器。

页面效果:

相关推荐
Re2751 小时前
揭秘索引的 “快”:从翻书到 B+ 树的效率革命
后端
David爱编程2 小时前
Java 三目运算符完全指南:写法、坑点与最佳实践
java·后端
学习编程的小羊2 小时前
Spring Boot 全局异常处理与日志监控实战
java·spring boot·后端
TS的美梦3 小时前
scanpy单细胞转录组python教程(四):单样本数据分析之降维聚类及细胞注释
python·数据分析·聚类·单细胞转录组·scanpy
一涯3 小时前
用python写一个抓取股市关键词的程序
前端·python
Moonbit4 小时前
MoonBit 作者寄语 2025 级清华深圳新生
前端·后端·程序员
前端的阶梯4 小时前
开发一个支持支付功能的微信小程序的注意事项,含泪送上
前端·后端·全栈
咕噜分发企业签名APP加固彭于晏4 小时前
腾讯元器的优点是什么
前端·后端
真就死难4 小时前
适用于个人开发、中小型项目的Embedding方案(配合ChromaDB)
python·embedding·rag
AAA修煤气灶刘哥5 小时前
Swagger 用着糟心?试试 Knife4j,后端开发狂喜
后端·面试