Django模板过滤器的使用教程

300 阅读3分钟

Django Template Filters

正如我们在插值教程中所看到的,我们能够在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>

django capfirst filter

接下来,我们可以试试标题过滤器。这个过滤器将一个字符串转换为标题大写,使单词以大写字母开始,而其他字符则保留小写。

<!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>

django dtl title filter

小写过滤器的作用和你所期望的一样。它把一个字符串转换成所有小写字母。我们可以在这里对我们的两个变量进行测试。

<!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>

dtl lower filter

带有参数的过滤器

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>

django template language add filter

堆叠过滤器

过滤器可以被堆叠在一起,或者说连锁在一起。让我们在这里看看这个动作。

<!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模板过滤器的信息