变量的渲染可以通过过滤器来修改。过滤器是一种特殊的函数,它们使用管道语法可以应用到变量块中的任何对象后面。举个栗子: {{ names|join(', ') }}
.
过滤器也可以一个接一个地链式调用。举个栗子:我们有一系列html标签,想要移除、拼接、大写首字母:
// names = ['paul
', 'jim
'];
{{ names|striptags|join(', ')|title }}
// => Paul, Jim
Swig的预加载使用了一系列有用的过滤器:
Source: lib/filters.js#L40
需要被转义的反斜杠转义字符。
*: 反斜杠转义后的字符串。
{{ "\"quoted string\""|addslashes }}
// => \"quoted string\"
Source: lib/filters.js#L59
实现输入首字母大写,其余小写。
*: 返回的类型和输入类型相同
{{ "i like Burritos"|capitalize }}
// => I like burritos
Source: lib/filters.js#L86
格式化日期或格式化日期兼容的字符串。
Name | Type | Optional | Default | Description |
---|---|---|---|---|
format | string |
undefined |
PHP-style date format compatible string. Escape characters with \ for string literals. |
|
offset | number |
✔ | undefined |
Timezone offset from GMT in minutes. |
abbr | string |
✔ | undefined |
Timezone abbreviation. Used for output only. |
string: 格式化的日期字符串。
// now = new Date();
{{ now|date('Y-m-d') }}
// => 2013-08-14
// now = new Date();
{{ now|date('jS \o\f F') }}
// => 4th of July
Source: lib/filters.js#L126
如果输入是`undefined`、`null`或者`false`,需要指定一个默认的返回值。
Name | Type | Optional | Default | Description |
---|---|---|---|---|
def | * |
undefined |
Value to return if `input` is `undefined`, `null`, or `false`. |
*: `input` 或 `def` 值。
{{ null_value|default('Tacos') }}
// => Tacos
{{ "Burritos"|default("Tacos") }}
// => Burritos
Source: lib/filters.js#L145
强制转义变量输出。作为可选项,可以使用 `e` 来作为`escape`的简短别名。如果打开自动转义选项,就会默认应用该过滤器。
Name | Type | Optional | Default | Description |
---|---|---|---|---|
type | string |
✔ | 'html' |
If you pass the string js in as the type, output will be escaped so that it is safe for JavaScript execution. |
string: 转义后的字符串。
{{ "<blah>"|escape }}
// => <blah>
{{ "<blah>"|e("js") }}
// => \u003Cblah\u003E
Source: lib/filters.js#L209
返回一个数组的第一项或一个字符串的首字母。对于剩下的其他所有对象会尝试返回第一个值变量。
*: The first item of the array or first character of the string input.
// my_arr = ['a', 'b', 'c']
{{ my_arr|first }}
// => a
// my_val = 'Tacos'
{{ my_val|first }}
// T
Source: lib/filters.js#L240
按照给定的key值对对象数组进行分组。如果没有提供数组,则会原样返回输入值。
Name | Type | Optional | Default | Description |
---|---|---|---|---|
key | string |
undefined |
Key to group by. |
object: 按照给定值分组后的数组。
// people = [{ age: 23, name: 'Paul' }, { age: 26, name: 'Jane' }, { age: 23, name: 'Jim' }];
{% for agegroup in people|groupBy('age') %}
<h2>{{ loop.key }}</h2>
<ul>
{% for person in agegroup %}
<li>{{ person.name }}</li>
{% endfor %}
</ul>
{% endfor %}
Source: lib/filters.js#L283
拼接输入值和字符串。
Name | Type | Optional | Default | Description |
---|---|---|---|---|
glue | string |
undefined |
String value to join items together. |
string:
// my_array = ['foo', 'bar', 'baz']
{{ my_array|join(', ') }}
// => foo, bar, baz
// my_key_object = { a: 'foo', b: 'bar', c: 'baz' }
{{ my_key_object|join(' and ') }}
// => foo and bar and baz
Source: lib/filters.js#L319
返回一个JSON
向后兼容swig@0.x.x则需要使用`json_encode`。
Name | Type | Optional | Default | Description |
---|---|---|---|---|
indent | number |
✔ | undefined |
Number of spaces to indent for pretty-formatting. |
string: 一个有效的JSON字符串。
// val = { a: 'b' }
{{ val|json }}
// => {"a":"b"}
// val = { a: 'b' }
{{ val|json(4) }}
// => {
// "a": "b"
// }
Source: lib/filters.js#L340
返回一个数组的最后一项或一个字符串的最后一个字符。剩下的其他所有对象会尝试返回最后一个值变量。
*: 数组的最后一项或字符串输入的最后一个字符。
// my_arr = ['a', 'b', 'c']
{{ my_arr|last }}
// => c
// my_val = 'Tacos'
{{ my_val|last }}
// s
Source: lib/filters.js#L374
返回数组长度、字符串长度或对象长度(item数)。
*: 输入值的长度
// my_arr = ['a', 'b', 'c']
{{ my_arr|length }}
// => 3
// my_str = 'Tacos'
{{ my_str|length }}
// => 5
// my_obj = {a: 5, b: 20}
{{ my_obj|length }}
// => 2
Source: lib/filters.js#L400
将输入转换为小写字母并返回。
*: 返回和数组类型相同的类型。
{{ "FOOBAR"|lower }}
// => foobar
// myObj = { a: 'FOO', b: 'BAR' }
{{ myObj|lower|join('') }}
// => foobar
Source: lib/filters.js#L412
考虑到 安全性能 已废除。
Source: lib/filters.js#L441
正则匹配并替换,使用的是JavaScript内置的String.replace()方法。
Name | Type | Optional | Default | Description |
---|---|---|---|---|
search | string |
undefined |
String or pattern to replace from the input. | |
replacement | string |
undefined |
String to replace matched pattern. | |
flags | string |
✔ | undefined |
Regular Expression flags. 'g': global match, 'i': ignore case, 'm': match over multiple lines |
string: 替换后的字符串。
// my_var = 'foobar';
{{ my_var|replace('o', 'e', 'g') }}
// => feebar
// my_var = "farfegnugen";
{{ my_var|replace('^f', 'p') }}
// => parfegnugen
// my_var = 'a1b2c3';
{{ my_var|replace('\w', '0', 'g') }}
// => 010203
Source: lib/filters.js#L457
将输入倒序返回。这是{{ input|sort(true) }}
的一个别名。
array: 倒序后的数组。如果输入不是数组则返回原始输入。
// val = [1, 2, 3];
{{ val|reverse }}
// => 3,2,1
Source: lib/filters.js#L472
强制输入不自动转义。只有在你确信在你的页面上渲染的那些内容是安全的情况下再使用它。
*: 忽略自动转义状态,输入原样返回。
// my_var = "<p>Stuff</p>";
{{ my_var|safe }}
// => <p>Stuff</p>
Source: lib/filters.js#L502
将输入升序排列。
如果给出的是一个对象,则将会将key生成一个排序后的数组返回。
如果给出的是一个字符串,每个字符将会被单独排序。
Name | Type | Optional | Default | Description |
---|---|---|---|---|
reverse | boolean |
✔ | false |
Output is given reverse-sorted if true. |
*: 排序后的数组。
// val = [2, 6, 4];
{{ val|sort }}
// => 2,4,6
// val = 'zaq';
{{ val|sort }}
// => aqz
// val = { bar: 1, foo: 2 }
{{ val|sort(true) }}
// => foo,bar
Source: lib/filters.js#L564
大写每个单词的首字母,其他字母小写。
*: 返回和输入相同的对象,会大写所有的单词首字母。
// my_str = 'this is soMe text';
{{ my_str|title }}
// => This Is Some Text
// my_arr = ['hi', 'this', 'is', 'an', 'array'];
{{ my_arr|title|join(' ') }}
// => Hi This Is An Array
Source: lib/filters.js#L586
移除数组中所有的重复项。
array: 没有重复项的数组。如果输入不是数组,则将输入原样返回。
// my_arr = [1, 2, 3, 4, 4, 3, 2, 1];
{{ my_arr|uniq|join(',') }}
// => 1,2,3,4
Source: lib/filters.js#L618
将输入的所有字母转换为大写。如果给出的是一个对象或数组,将会大写所有的值(value)。
*: 返回的类型和输入类型相同,所有字符串字母都将转换为大写。
// my_str = 'tacos';
{{ my_str|upper }}
// => TACOS
// my_arr = ['tacos', 'burritos'];
{{ my_arr|upper|join(' & ') }}
// => TACOS & BURRITOS
Source: lib/filters.js#L638
URL-encode一个字符串。
*: URL-encode后的字符串。
// my_str = 'param=1&anotherParam=2';
{{ my_str|url_encode }}
// => param%3D1%26anotherParam%3D2
Source: lib/filters.js#L657
URL-decode一个字符串。
*: URL-decode后的字符串。
// my_str = 'param%3D1%26anotherParam%3D2';
{{ my_str|url_decode }}
// => param=1&anotherParam=2