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

页面效果:

相关推荐
IT·小灰灰3 分钟前
Python——自动化发送邮件
运维·网络·后端·python·自动化
狼刀流8 分钟前
(8) cuda分析工具
python·cuda
Gnevergiveup9 分钟前
2024网鼎杯青龙组Web+Misc部分WP
开发语言·前端·python
颜淡慕潇32 分钟前
【K8S系列】Kubernetes 中 Service IP 分配 问题及解决方案【已解决】
后端·云原生·容器·kubernetes
机器学习之心1 小时前
GCN+BiLSTM多特征输入时间序列预测(Pytorch)
人工智能·pytorch·python·gcn+bilstm
子墨7771 小时前
MySQL学习笔记
python
黑龙江亿林等级保护测评1 小时前
等保行业如何选择核实的安全防御技术
网络·人工智能·python·安全·web安全·智能路由器·ddos
ai产品老杨1 小时前
深度学习模型量化原理
开发语言·人工智能·python·深度学习·安全·音视频
赵闪闪1681 小时前
PDF无法转换成其他格式的常见原因与解决方法解析
python
恬淡虚无真气从之1 小时前
django中的类属性和类方法
后端·python·django