正如我们在插值教程中所看到的,我们能够在Django模板中使用变量来输出动态数据,这些变量被包裹在特殊的开头**{{和结尾}的大括号字符中。Django还提供了一种方法,通过使用过滤器在模板中执行各种类型的数据格式化。过滤器就像简单的内置函数,你可以使用特殊的管道|**语法来调用。过滤器也可以在表达式中使用,在模板中进行简单的计算。
DTL过滤器的语法
要调用一个过滤器,你只需在变量名后面直接加上一个管道**|**,然后再加上要运行的过滤器的名字。
没有过滤器
{{ timeframe }}
有过滤器
{{ timeframe|capfirst }}
运行中的过滤器
我们要看的第一个过滤器是capfirst过滤器。它将被调用的变量的第一个字符大写。它在我们所做的模板中得到了强调。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>{{ timeframe|capfirst }} goal</h1>
<h2>{{ goal }}</h2>
</body>
</html>

接下来,我们可以试试标题过滤器。这个过滤器将一个字符串转换为标题大写,使单词以大写字母开始,而其他字符则保留小写。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>{{ timeframe|capfirst }} goal</h1>
<h2>{{ goal|title }}</h2>
</body>
</html>

小写过滤器的作用和你所期望的一样。它把一个字符串转换成所有小写字母。我们可以在这里对我们的两个变量进行测试。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>{{ timeframe|lower }} goal</h1>
<h2>{{ goal|lower }}</h2>
</body>
</html>

带有参数的过滤器
Django模板中的过滤器也可以接受一个参数。一个这样的过滤器是add过滤器。这个过滤器将传递的参数添加到值中。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>{{ timeframe|add:' Timeframe' }} goal</h1>
<h2>{{ goal }}</h2>
</body>
</html>

堆叠过滤器
过滤器可以被堆叠在一起,或者说连锁在一起。让我们在这里看看这个动作。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>{{ timeframe|capfirst|add:' Timeframe' }} goal</h1>
<h2>{{ goal }}</h2>
</body>
</html>
所有可用的过滤器都列在这里。add, addslashes, capfirst, center, cut, date, default, default_if_none, dictsort, dictsortreversed, divisibleby, escape, escapejs, filesizeformat, first, floatformat, force_escape, get_digit, iriencode, join, json_script, last, length, length_is, linebreaks, linebreaksBR, linenumbers, ljust, lower,make_list, phone2numeric, pluralize, pprint, random, rjust, safe, safeseq, slice, slugify, stringformat, striptags, time, timesince, timeuntil, title, truncatechars, truncatechars_html, truncatewords, truncatewords_html, unordered_list, upper, urlencode, urlize, urlizetrunc, wordcount, wordwrap, and yesno.在过滤器的参考资料中了解它们各自的工作原理。
总而言之,过滤器就像简单的调整或转换,它被应用于在模板中用插值呈现的值。它们使得从views.py中移除任何格式化类型的逻辑成为可能,并将这种类型的处理直接保留在模板中。
了解更多关于Django模板过滤器的信息
- 自定义Django过滤器教程(pfinn.net)
- 在Django中创建自定义模板标签和过滤器(pluralsight.com)
- 了解模板过滤器 在Django中创建自定义过滤器(medium.com)
- Django模板过滤器实例(riptutorial.com)
- Django模板过滤器(girlthatlovestocode.com)
- 如何在Django中使用模板过滤器(learningaboutelectronics.com)
- 使用Django过滤器的Django表搜索过滤器 (thequickblog.com)
- Django自定义模板过滤器如何提及用户和类别(stackoverflow.com)
- Django如何编写Django自定义模板标签和过滤器(studygyaan.com)
