当前位置: 首页 > article >正文

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:将字符串中的所有字母转换为大写。

二、自定义过滤器

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

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

页面效果:

 


http://www.kler.cn/news/362714.html

相关文章:

  • [项目][boost搜索引擎#4] cpp-httplib使用 | log.hpp | 前端 | 测试及总结
  • Linux笔记之文件查找和搜索命令which,find,locate,whereis总结
  • 考研篇——数据结构王道3.2.3_队列的链式实现
  • 【设计模式系列】命令模式
  • 技术成神之路:设计模式(二十二)命令模式
  • YOLO V3 网络构架解析
  • 【软件测试】JUnit
  • 基于FPGA的以太网设计(四)
  • 短剧小程序,打造专属短剧观看平台
  • MyBatis 基础知识:配置文件、映射器与 SQL 示例详解
  • 智能体时代:重塑人机交互的未来
  • 力扣刷题(sql)--零散知识点(1)
  • 恺撒密码简单实例
  • C语言程序设计:现代设计方法习题笔记《chapter3》
  • PyTorch求导相关
  • Eclipse Java 构建路径
  • ROS的导航功能包navfn中计算单元格的势值的原理介绍
  • 自动化抖音点赞取消脚本批量处理
  • 记一次真实项目的性能问题诊断、优化(阿里云redis分片带宽限制问题)过程
  • 富格林:严防欺诈漏洞安全交易
  • JVM(HotSpot):GC之垃圾回收器的分类
  • 2024年9月青少年软件编程(C语言/C++)等级考试试卷(三级)
  • 047_python基于Hadoop的租房数据分析系统的设计与实现
  • WRB Hidden Gap,WRB隐藏缺口,MetaTrader 免费公式!(指标教程)
  • 【数据结构】二叉树遍历(前序/中序/后序/层序-递归与非递归)
  • 开源呼叫中心系统与商业软件的对比