Swig

一个适用于Node.js和浏览器的模板引擎

过滤器

变量的渲染可以通过过滤器来修改。过滤器是一种特殊的函数,它们使用管道语法可以应用到变量块中的任何对象后面。举个栗子: {{ names|join(', ') }}.

过滤器也可以一个接一个地链式调用。举个栗子:我们有一系列html标签,想要移除、拼接、大写首字母:

// names = ['

paul

', '

jim

']; {{ names|striptags|join(', ')|title }} // => Paul, Jim

Swig的预加载使用了一系列有用的过滤器:


addslashes

Source: lib/filters.js#L40

需要被转义的反斜杠转义字符。

返回

*: 反斜杠转义后的字符串。

例子

{{ "\"quoted string\""|addslashes }}
// => \"quoted string\"

capitalize

Source: lib/filters.js#L59

实现输入首字母大写,其余小写。

返回

*: 返回的类型和输入类型相同

例子

{{ "i like Burritos"|capitalize }}
// => I like burritos

date(format, offset, abbr)

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

default(def)

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

escape(type)

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

first

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

groupBy(key)

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 %}

join(glue)

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

json(indent)

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"
//    }

last

Source: lib/filters.js#L340

返回一个数组的最后一项或一个字符串的最后一个字符。剩下的其他所有对象会尝试返回最后一个值变量。

返回

*: 数组的最后一项或字符串输入的最后一个字符。

例子

// my_arr = ['a', 'b', 'c']
{{ my_arr|last }}
// => c
// my_val = 'Tacos'
{{ my_val|last }}
// s

length

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

lower

Source: lib/filters.js#L400

将输入转换为小写字母并返回。

返回

*: 返回和数组类型相同的类型。

例子

{{ "FOOBAR"|lower }}
// => foobar
// myObj = { a: 'FOO', b: 'BAR' }
{{ myObj|lower|join('') }}
// => foobar

raw

Source: lib/filters.js#L412

考虑到 安全性能 已废除。

replace(search, replacement, flags)

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

reverse

Source: lib/filters.js#L457

将输入倒序返回。这是{{ input|sort(true) }}的一个别名。

返回

array: 倒序后的数组。如果输入不是数组则返回原始输入。

例子

// val = [1, 2, 3];
{{ val|reverse }}
// => 3,2,1

safe

Source: lib/filters.js#L472

强制输入不自动转义。只有在你确信在你的页面上渲染的那些内容是安全的情况下再使用它。

返回

*: 忽略自动转义状态,输入原样返回。

例子

// my_var = "<p>Stuff</p>";
{{ my_var|safe }}
// => <p>Stuff</p>

sort(reverse)

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

striptags

Source: lib/filters.js#L539

去除HTML标签。

返回

*: 返回和输入相同的对象,字符串值的标签会被去除。

例子

// stuff = '<p>foobar</p>';
{{ stuff|striptags }}
// => foobar

title

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

uniq

Source: lib/filters.js#L586

移除数组中所有的重复项。

返回

array: 没有重复项的数组。如果输入不是数组,则将输入原样返回。

例子

// my_arr = [1, 2, 3, 4, 4, 3, 2, 1];
{{ my_arr|uniq|join(',') }}
// => 1,2,3,4

upper

Source: lib/filters.js#L618

将输入的所有字母转换为大写。如果给出的是一个对象或数组,将会大写所有的值(value)。

返回

*: 返回的类型和输入类型相同,所有字符串字母都将转换为大写。

例子

// my_str = 'tacos';
{{ my_str|upper }}
// => TACOS
// my_arr = ['tacos', 'burritos'];
{{ my_arr|upper|join(' & ') }}
// => TACOS & BURRITOS

url_encode

Source: lib/filters.js#L638

URL-encode一个字符串。

返回

*: URL-encode后的字符串。

例子

// my_str = 'param=1&anotherParam=2';
{{ my_str|url_encode }}
// => param%3D1%26anotherParam%3D2

url_decode

Source: lib/filters.js#L657

URL-decode一个字符串。

返回

*: URL-decode后的字符串。

例子

// my_str = 'param%3D1%26anotherParam%3D2';
{{ my_str|url_decode }}
// => param=1&anotherParam=2