Swig 使用指南如何使用

21 篇文章 0 订阅
<span style="font-size:24px;"><strong>swig.init({</strong></span>
<span style="font-size:24px;"><strong>  allowErrors: false,   </strong></span>
<span style="font-size:24px;"><strong>  autoescape: true,</strong></span>
<span style="font-size:24px;"><strong>  cache: true,</strong></span>
<span style="font-size:24px;"><strong>  encoding: 'utf8',</strong></span>
<span style="font-size:24px;"><strong>  filters: {},</strong></span>
<span style="font-size:24px;"><strong>  root: '/',</strong></span>
<span style="font-size:24px;"><strong>  tags: {},</strong></span>
<span style="font-size:24px;"><strong>  extensions: {},</strong></span>
<span style="font-size:24px;"><strong>  tzOffset: 0</strong></span>
<span style="font-size:24px;"><strong>});</strong></span>
<span style="font-size:24px;"><strong>options:</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>allowErrors: </strong></span>
<span style="font-size:24px;"><strong>默认值为 false。将所有模板解析和编译错误直接输出到模板。如果为 true,则将引发错误,抛出到 Node.js 进程中,可能会使您的应用程序崩溃。</strong></span>
<span style="font-size:24px;"><strong>autoescape: </strong></span>
<span style="font-size:24px;"><strong>默认true,强烈建议保持。字符转换表请参阅转义过滤器。</strong></span>
<span style="font-size:24px;"><strong>true: HTML安全转义 </strong></span>
<span style="font-size:24px;"><strong>false: 不转义,除非使用转义过滤器或者转义标签 </strong></span>
<span style="font-size:24px;"><strong>'js': js安全转义</strong></span>
<span style="font-size:24px;"><strong>cache: </strong></span>
<span style="font-size:24px;"><strong>更改为 false 将重新编译每个请求的模板的文件。正式环境建议保持true。</strong></span>
<span style="font-size:24px;"><strong>encoding </strong></span>
<span style="font-size:24px;"><strong>模板文件编码</strong></span>
<span style="font-size:24px;"><strong>root </strong></span>
<span style="font-size:24px;"><strong>需要搜索模板的目录。如果模板传递给 swig.compileFile 绝对路径(以/开头),Swig不会在模板root中搜索。如果传递一个数组,使用第一个匹配成功的数组项。</strong></span>
<span style="font-size:24px;"><strong>tzOffset </strong></span>
<span style="font-size:24px;"><strong>设置默认时区偏移量。此设置会使转换日期过滤器会自动的修正相应时区偏移量。</strong></span>
<span style="font-size:24px;"><strong>filters 自定义过滤器或者重写默认过滤器,参见自定义过滤器指南。</strong></span>
<span style="font-size:24px;"><strong>tags </strong></span>
<span style="font-size:24px;"><strong>自定义标签或者重写默认标签,参见自定义标签指南。</strong></span>
<span style="font-size:24px;"><strong>extensions 添加第三方库,可以在编译模板时使用,参见参见自定义标签指南。</strong></span>
<span style="font-size:24px;"><strong>nodejs</strong></span>
<span style="font-size:24px;"><strong>var tpl = swig.compileFile("path/to/template/file.html");</strong></span>
<span style="font-size:24px;"><strong>var renderedHtml = tpl.render({ vars: 'to be inserted in template' });</strong></span>
<span style="font-size:24px;"><strong>or</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>var tpl = swig.compile("Template string here");</strong></span>
<span style="font-size:24px;"><strong>var renderedHtml = tpl({ vars: 'to be inserted in template' });</strong></span>
<span style="font-size:24px;"><strong>结合Express</strong></span>
<span style="font-size:24px;"><strong>npm install express</strong></span>
<span style="font-size:24px;"><strong>npm install consolidate</strong></span>
<span style="font-size:24px;"><strong>然后</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>app.engine('.html', cons.swig);</strong></span>
<span style="font-size:24px;"><strong>app.set('view engine', 'html');</strong></span>
<span style="font-size:24px;"><strong>浏览器</strong></span>
<span style="font-size:24px;"><strong>Swig浏览器版本的api基本与nodejs版相同,不同点如下:</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>不能使用swig.compileFile,浏览器没有文件系统</strong></span>
<span style="font-size:24px;"><strong>你必须提前使用swig.compile编译好模板</strong></span>
<span style="font-size:24px;"><strong>按顺序使用extends, import, and include,同时在swig.compile里使用参数templateKey来查找模板</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>var template = swig.compile('<p>{% block content %}{% endblock %}</p>', { filename: 'main' });</strong></span>
<span style="font-size:24px;"><strong>var mypage = swig.compile('{% extends "main" %}{% block content %}Oh hey there!{% endblock %}', { filename: 'mypage' });</strong></span>
<span style="font-size:24px;"><strong>基础</strong></span>
<span style="font-size:24px;"><strong>变量</strong></span>
<span style="font-size:24px;"><strong>{{ foo.bar }}</strong></span>
<span style="font-size:24px;"><strong>{{ foo['bar'] }}</strong></span>
<span style="font-size:24px;"><strong>如果变量未定义,输出空字符。</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>变量可以通过过滤器来修改:</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>{{ name|title }} was born on {{ birthday|date('F jS, Y') }}</strong></span>
<span style="font-size:24px;"><strong>// Jane was born on July 6th, 1985</strong></span>
<span style="font-size:24px;"><strong>逻辑标签</strong></span>
<span style="font-size:24px;"><strong>参见标签部分。</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>注释</strong></span>
<span style="font-size:24px;"><strong>空白</strong></span>
<span style="font-size:24px;"><strong>模板里的空白在最终输出时默认保留,如果需要去掉空白,可以在逻辑标签前后加上空白控制服-:</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>{% for item in seq -%}</strong></span>
<span style="font-size:24px;"><strong>    {{ item }}</strong></span>
<span style="font-size:24px;"><strong>{%- endfor %}</strong></span>
<span style="font-size:24px;"><strong>模板继承</strong></span>
<span style="font-size:24px;"><strong>Swig 使用 extends 和 block 来实现模板继承</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>layout.html</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong><!doctype html></strong></span>
<span style="font-size:24px;"><strong><html></strong></span>
<span style="font-size:24px;"><strong><head></strong></span>
<span style="font-size:24px;"><strong>    <meta charset="utf-8"></strong></span>
<span style="font-size:24px;"><strong>    <title>{% block title %}My Site{% endblock %}</title></strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>    {% block head %}</strong></span>
<span style="font-size:24px;"><strong>        <link rel="stylesheet" href="main.css"></strong></span>
<span style="font-size:24px;"><strong>    {% endblock %}</strong></span>
<span style="font-size:24px;"><strong></head></strong></span>
<span style="font-size:24px;"><strong><body></strong></span>
<span style="font-size:24px;"><strong>    {% block content %}{% endblock %}</strong></span>
<span style="font-size:24px;"><strong></body></strong></span>
<span style="font-size:24px;"><strong></html></strong></span>
<span style="font-size:24px;"><strong>index.html</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>{% extends 'layout.html' %}</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>{% block title %}My Page{% endblock %}</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>{% block head %}</strong></span>
<span style="font-size:24px;"><strong>{% parent %}</strong></span>
<span style="font-size:24px;"><strong>    <link rel="stylesheet" href="custom.css"></strong></span>
<span style="font-size:24px;"><strong>{% endblock %}</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>{% block content %}</strong></span>
<span style="font-size:24px;"><strong>    <p>This is just an awesome page.</p></strong></span>
<span style="font-size:24px;"><strong>{% endblock %}</strong></span>
<span style="font-size:24px;"><strong>变量过滤器</strong></span>
<span style="font-size:24px;"><strong>用于修改变量。变量名称后用 | 字符分隔添加过滤器。您可以添加多个过滤器。</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>例子</strong></span>
<span style="font-size:24px;"><strong>{{ name|title }} was born on {{ birthday|date('F jS, Y') }}</strong></span>
<span style="font-size:24px;"><strong>and has {{ bikes|length|default("zero") }} bikes.</strong></span>
<span style="font-size:24px;"><strong>也可以使用 filter 标签来为块内容添加过滤器</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>{% filter upper %}oh hi, paul{% endfilter %}</strong></span>
<span style="font-size:24px;"><strong>内置过滤器</strong></span>
<span style="font-size:24px;"><strong>add(value) </strong></span>
<span style="font-size:24px;"><strong>使变量与value相加,可以转换为数值字符串会自动转换为数值。</strong></span>
<span style="font-size:24px;"><strong>addslashes </strong></span>
<span style="font-size:24px;"><strong>用 \ 转义字符串</strong></span>
<span style="font-size:24px;"><strong>capitalize </strong></span>
<span style="font-size:24px;"><strong>大写首字母</strong></span>
<span style="font-size:24px;"><strong>date(format[, tzOffset]) </strong></span>
<span style="font-size:24px;"><strong>转换日期为指定格式</strong></span>
<span style="font-size:24px;"><strong>format: 格式 </strong></span>
<span style="font-size:24px;"><strong>tzOffset: 时区</strong></span>
<span style="font-size:24px;"><strong>default(value) </strong></span>
<span style="font-size:24px;"><strong>默认值(如果变量为undefined,null,false)</strong></span>
<span style="font-size:24px;"><strong>e </strong></span>
<span style="font-size:24px;"><strong>同escape</strong></span>
<span style="font-size:24px;"><strong>escape([type]) </strong></span>
<span style="font-size:24px;"><strong>转义字符</strong></span>
<span style="font-size:24px;"><strong>默认: &, <, >, ", ' </strong></span>
<span style="font-size:24px;"><strong>js: &, <, >, ", ', =, -, ;</strong></span>
<span style="font-size:24px;"><strong>first </strong></span>
<span style="font-size:24px;"><strong>返回数组第一个值</strong></span>
<span style="font-size:24px;"><strong>join(glue) </strong></span>
<span style="font-size:24px;"><strong>同[].join</strong></span>
<span style="font-size:24px;"><strong>json_encode([indent]) </strong></span>
<span style="font-size:24px;"><strong>类似JSON.stringify, indent为缩进空格数</strong></span>
<span style="font-size:24px;"><strong>last </strong></span>
<span style="font-size:24px;"><strong>返回数组最后一个值</strong></span>
<span style="font-size:24px;"><strong>length </strong></span>
<span style="font-size:24px;"><strong>返回变量的length,如果是object,返回key的数量</strong></span>
<span style="font-size:24px;"><strong>lower </strong></span>
<span style="font-size:24px;"><strong>同''.toLowerCase()</strong></span>
<span style="font-size:24px;"><strong>raw </strong></span>
<span style="font-size:24px;"><strong>指定输入不会被转义</strong></span>
<span style="font-size:24px;"><strong>replace(search, replace[, flags]) </strong></span>
<span style="font-size:24px;"><strong>同''.replace</strong></span>
<span style="font-size:24px;"><strong>reverse </strong></span>
<span style="font-size:24px;"><strong>翻转数组</strong></span>
<span style="font-size:24px;"><strong>striptags </strong></span>
<span style="font-size:24px;"><strong>去除html/xml标签</strong></span>
<span style="font-size:24px;"><strong>title </strong></span>
<span style="font-size:24px;"><strong>大写首字母</strong></span>
<span style="font-size:24px;"><strong>uniq </strong></span>
<span style="font-size:24px;"><strong>数组去重</strong></span>
<span style="font-size:24px;"><strong>upper </strong></span>
<span style="font-size:24px;"><strong>同''.toUpperCase</strong></span>
<span style="font-size:24px;"><strong>url_encode </strong></span>
<span style="font-size:24px;"><strong>同encodeURIComponent</strong></span>
<span style="font-size:24px;"><strong>url_decode </strong></span>
<span style="font-size:24px;"><strong>同decodeURIComponemt</strong></span>
<span style="font-size:24px;"><strong>自定义过滤器</strong></span>
<span style="font-size:24px;"><strong>创建一个 myfilter.js 然后引入到 Swig 的初始化函数中</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>swig.init({ filters: require('myfilters') });</strong></span>
<span style="font-size:24px;"><strong>在 myfilter.js 里,每一个 filter 方法都是一个简单的 js 方法,下例是一个翻转字符串的 filter:</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>exports.myfilter = function (input) {</strong></span>
<span style="font-size:24px;"><strong>    return input.toString().split('').reverse().join('');</strong></span>
<span style="font-size:24px;"><strong>};</strong></span>
<span style="font-size:24px;"><strong>你的 filter 一旦被引入,你就可以向下面一样使用:</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>{{ name|myfilter }}</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>{% filter myfilter %}I shall be filtered{% endfilter %}</strong></span>
<span style="font-size:24px;"><strong>你也可以像下面一样给 filter 传参数:</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>exports.prefix = function(input, prefix) {</strong></span>
<span style="font-size:24px;"><strong>    return prefix.toString() + input.toString();</strong></span>
<span style="font-size:24px;"><strong>};</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>{{ name|prefix('my prefix') }}</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>{% filter prefix 'my prefix' %}I will be prefixed with "my prefix".{% endfilter %}</strong></span>
<span style="font-size:24px;"><strong>{% filter prefix foo %}I will be prefixed with the value stored to `foo`.{% endfilter %}</strong></span>
<span style="font-size:24px;"><strong>标签</strong></span>
<span style="font-size:24px;"><strong>内置标签</strong></span>
<span style="font-size:24px;"><strong>extends </strong></span>
<span style="font-size:24px;"><strong>使当前模板继承父模板,必须在文件最前</strong></span>
<span style="font-size:24px;"><strong>参数: </strong></span>
<span style="font-size:24px;"><strong>file: </strong></span>
<span style="font-size:24px;"><strong>父模板相对模板 root 的相对路径</strong></span>
<span style="font-size:24px;"><strong>block </strong></span>
<span style="font-size:24px;"><strong>定义一个块,使之可以被继承的模板重写,或者重写父模板的同名块</strong></span>
<span style="font-size:24px;"><strong>参数: </strong></span>
<span style="font-size:24px;"><strong>name: </strong></span>
<span style="font-size:24px;"><strong>块的名字,必须以字母数字下划线开头</strong></span>
<span style="font-size:24px;"><strong>parent </strong></span>
<span style="font-size:24px;"><strong>将父模板中同名块注入当前块中</strong></span>
<span style="font-size:24px;"><strong>include </strong></span>
<span style="font-size:24px;"><strong>包含一个模板到当前位置,这个模板将使用当前上下文</strong></span>
<span style="font-size:24px;"><strong>参数: </strong></span>
<span style="font-size:24px;"><strong>file: </strong></span>
<span style="font-size:24px;"><strong>包含模板相对模板 root 的相对路径 </strong></span>
<span style="font-size:24px;"><strong>ignore missing: </strong></span>
<span style="font-size:24px;"><strong>包含模板不存在也不会报错 </strong></span>
<span style="font-size:24px;"><strong>with x: </strong></span>
<span style="font-size:24px;"><strong>设置 x 至根上下文对象以传递给模板生成。必须是一个键值对 </strong></span>
<span style="font-size:24px;"><strong>only: </strong></span>
<span style="font-size:24px;"><strong>限制模板上下文中用 with x 定义的参数</strong></span>
<span style="font-size:24px;"><strong>{% include template_path %}</strong></span>
<span style="font-size:24px;"><strong>{% include "path/to/template.js" %} </strong></span>
<span style="font-size:24px;"><strong>你可以标记 ignore missing,这样如果模板不存在,也不会抛出错误</strong></span>
<span style="font-size:24px;"><strong>{% include "foobar.html" ignore missing %}</strong></span>
<span style="font-size:24px;"><strong>本地声明的上下文变量,默认情况不会传递给包含的模板。例如以下情况,inc.html 无法得到 foo 和 bar</strong></span>
<span style="font-size:24px;"><strong>{% set foo = "bar" %}</strong></span>
<span style="font-size:24px;"><strong>{% include "inc.html" %}</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>{% for bar in thing %}</strong></span>
<span style="font-size:24px;"><strong>    {% include "inc.html" %}</strong></span>
<span style="font-size:24px;"><strong>{% endfor %}</strong></span>
<span style="font-size:24px;"><strong>如果想把本地声明的变量引入到包含的模板种,可以使用 with 参数来把后面的对象创建到包含模板的上下文中</strong></span>
<span style="font-size:24px;"><strong>{% set foo = { bar: "baz" } %}</strong></span>
<span style="font-size:24px;"><strong>{% include "inc.html" with foo %}</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>{% for bar in thing %}</strong></span>
<span style="font-size:24px;"><strong>    {% include "inc.html" with bar %}</strong></span>
<span style="font-size:24px;"><strong>{% endfor %}    </strong></span>
<span style="font-size:24px;"><strong>如果当前上下文中 foo 和 bar 可用,下面的情况中,只有 foo 会被 inc.html 定义</strong></span>
<span style="font-size:24px;"><strong>{% include "inc.html" with foo only %}</strong></span>
<span style="font-size:24px;"><strong>only 必须作为最后一个参数,放在其他位置会被忽略</strong></span>
<span style="font-size:24px;"><strong>raw </strong></span>
<span style="font-size:24px;"><strong>停止解析标记中任何内容,所有内容都将输出</strong></span>
<span style="font-size:24px;"><strong>参数: </strong></span>
<span style="font-size:24px;"><strong>file: </strong></span>
<span style="font-size:24px;"><strong>父模板相对模板 root 的相对路径</strong></span>
<span style="font-size:24px;"><strong>for </strong></span>
<span style="font-size:24px;"><strong>遍历对象和数组</strong></span>
<span style="font-size:24px;"><strong>参数: </strong></span>
<span style="font-size:24px;"><strong>x: </strong></span>
<span style="font-size:24px;"><strong>当前循环迭代名 </strong></span>
<span style="font-size:24px;"><strong>in: </strong></span>
<span style="font-size:24px;"><strong>语法标记 </strong></span>
<span style="font-size:24px;"><strong>y: </strong></span>
<span style="font-size:24px;"><strong>可迭代对象。可以使用过滤器修改</strong></span>
<span style="font-size:24px;"><strong>{% for x in y %}</strong></span>
<span style="font-size:24px;"><strong>    {% if loop.first %}<ul>{% endif %}</strong></span>
<span style="font-size:24px;"><strong>    <li>{{ loop.index }} - {{ loop.key }}: {{ x }}</li></strong></span>
<span style="font-size:24px;"><strong>    {% if loop.last %}</ul>{% endif %}</strong></span>
<span style="font-size:24px;"><strong>{% endfor %}</strong></span>
<span style="font-size:24px;"><strong>特殊循环变量 </strong></span>
<span style="font-size:24px;"><strong>loop.index:当前循环的索引(1开始) </strong></span>
<span style="font-size:24px;"><strong>loop.index0:当前循环的索引(0开始) </strong></span>
<span style="font-size:24px;"><strong>loop.revindex:当前循环从结尾开始的索引(1开始) </strong></span>
<span style="font-size:24px;"><strong>loop.revindex0:当前循环从结尾开始的索引(0开始) </strong></span>
<span style="font-size:24px;"><strong>loop.key:如果迭代是对象,是当前循环的键,否则同 loop.index </strong></span>
<span style="font-size:24px;"><strong>loop.first:如果是第一个值返回 true </strong></span>
<span style="font-size:24px;"><strong>loop.last:如果是最后一个值返回 true </strong></span>
<span style="font-size:24px;"><strong>loop.cycle:一个帮助函数,以指定的参数作为周期</strong></span>
<span style="font-size:24px;"><strong>{% for item in items %}</strong></span>
<span style="font-size:24px;"><strong>    <li class="{{ loop.cycle('odd', 'even') }}">{{ item }}</li></strong></span>
<span style="font-size:24px;"><strong>{% endfor %}</strong></span>
<span style="font-size:24px;"><strong>在 for 标签里使用 else</strong></span>
<span style="font-size:24px;"><strong>{% for person in people %}</strong></span>
<span style="font-size:24px;"><strong>    {{ person }}</strong></span>
<span style="font-size:24px;"><strong>{% else %}</strong></span>
<span style="font-size:24px;"><strong>    There are no people yet!</strong></span>
<span style="font-size:24px;"><strong>{% endfor %}</strong></span>
<span style="font-size:24px;"><strong>if </strong></span>
<span style="font-size:24px;"><strong>条件语句</strong></span>
<span style="font-size:24px;"><strong>参数: </strong></span>
<span style="font-size:24px;"><strong>...: </strong></span>
<span style="font-size:24px;"><strong>接受任何有效的 JavaScript 条件语句,以及一些其他人类可读语法</strong></span>
<span style="font-size:24px;"><strong>{% if x %}{% endif %}</strong></span>
<span style="font-size:24px;"><strong>{% if !x %}{% endif %}</strong></span>
<span style="font-size:24px;"><strong>{% if not x %}{% endif %}</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>{% if x and y %}{% endif %}</strong></span>
<span style="font-size:24px;"><strong>{% if x && y %}{% endif %}</strong></span>
<span style="font-size:24px;"><strong>{% if x or y %}{% endif %}</strong></span>
<span style="font-size:24px;"><strong>{% if x || y %}{% endif %}</strong></span>
<span style="font-size:24px;"><strong>{% if x || (y && z) %}{% endif %}</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>{% if x [operator] y %}</strong></span>
<span style="font-size:24px;"><strong>    Operators: ==, !=, <, <=, >, >=, ===, !==</strong></span>
<span style="font-size:24px;"><strong>{% endif %}</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>{% if x == 'five' %}</strong></span>
<span style="font-size:24px;"><strong>    The operands can be also be string or number literals</strong></span>
<span style="font-size:24px;"><strong>{% endif %}</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>{% if x|length === 3 %}</strong></span>
<span style="font-size:24px;"><strong>    You can use filters on any operand in the statement.</strong></span>
<span style="font-size:24px;"><strong>{% endif %}</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>{% if x in y %}</strong></span>
<span style="font-size:24px;"><strong>    If x is a value that is present in y, this will return true.</strong></span>
<span style="font-size:24px;"><strong>{% endif %}</strong></span>
<span style="font-size:24px;"><strong>else 和 else if</strong></span>
<span style="font-size:24px;"><strong>{% if foo %}</strong></span>
<span style="font-size:24px;"><strong>    Some content.</strong></span>
<span style="font-size:24px;"><strong>{% else if "foo" in bar %}</strong></span>
<span style="font-size:24px;"><strong>    Content if the array `bar` has "foo" in it.</strong></span>
<span style="font-size:24px;"><strong>{% else %}</strong></span>
<span style="font-size:24px;"><strong>    Fallback content.</strong></span>
<span style="font-size:24px;"><strong>{% endif %}</strong></span>
<span style="font-size:24px;"><strong>autoescape </strong></span>
<span style="font-size:24px;"><strong>改变当前变量的自动转义行为</strong></span>
<span style="font-size:24px;"><strong>参数: </strong></span>
<span style="font-size:24px;"><strong>on: </strong></span>
<span style="font-size:24px;"><strong>当前内容是否转义 </strong></span>
<span style="font-size:24px;"><strong>type: </strong></span>
<span style="font-size:24px;"><strong>转义类型,js 或者 html,默认 html</strong></span>
<span style="font-size:24px;"><strong>假设</strong></span>
<span style="font-size:24px;"><strong>some_html_output = '<p>Hello "you" & \'them\'</p>';</strong></span>
<span style="font-size:24px;"><strong>然后</strong></span>
<span style="font-size:24px;"><strong>{% autoescape false %}</strong></span>
<span style="font-size:24px;"><strong>    {{ some_html_output }}</strong></span>
<span style="font-size:24px;"><strong>{% endautoescape %}</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>{% autoescape true %}</strong></span>
<span style="font-size:24px;"><strong>    {{ some_html_output }}</strong></span>
<span style="font-size:24px;"><strong>{% endautoescape %}</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>{% autoescape true "js" %}</strong></span>
<span style="font-size:24px;"><strong>    {{ some_html_output }}</strong></span>
<span style="font-size:24px;"><strong>{% endautoescape %}</strong></span>
<span style="font-size:24px;"><strong>将会输出</strong></span>
<span style="font-size:24px;"><strong><p>Hello "you" & 'them'</p></strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong><p>Hello "you" & 'them' </p></strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>\u003Cp\u003EHello \u0022you\u0022 & \u0027them\u0027\u003C\u005Cp\u003E</strong></span>
<span style="font-size:24px;"><strong>set </strong></span>
<span style="font-size:24px;"><strong>设置一个变量,在当前上下文中复用</strong></span>
<span style="font-size:24px;"><strong>参数: </strong></span>
<span style="font-size:24px;"><strong>name: </strong></span>
<span style="font-size:24px;"><strong>变量名 </strong></span>
<span style="font-size:24px;"><strong>=: </strong></span>
<span style="font-size:24px;"><strong>语法标记 </strong></span>
<span style="font-size:24px;"><strong>value: </strong></span>
<span style="font-size:24px;"><strong>变量值</strong></span>
<span style="font-size:24px;"><strong>{% set foo = [0, 1, 2, 3, 4, 5] %}</strong></span>
<span style="font-size:24px;"><strong>{% for num in foo %}</strong></span>
<span style="font-size:24px;"><strong>    <li>{{ num }}</li></strong></span>
<span style="font-size:24px;"><strong>{% endfor %}</strong></span>
<span style="font-size:24px;"><strong>macro </strong></span>
<span style="font-size:24px;"><strong>创建自定义可服用的代码段</strong></span>
<span style="font-size:24px;"><strong>参数: </strong></span>
<span style="font-size:24px;"><strong>...: </strong></span>
<span style="font-size:24px;"><strong>用户定义</strong></span>
<span style="font-size:24px;"><strong>{% macro input type name id label value error %}</strong></span>
<span style="font-size:24px;"><strong><label for="{{ name }}">{{ label }}</label></strong></span>
<span style="font-size:24px;"><strong><input type="{{ type }}" name="{{ name }}" id="{{ id }}" value="{{ value }}"{% if error %} class="error"{% endif %}></strong></span>
<span style="font-size:24px;"><strong>{% endmacro %}</strong></span>
<span style="font-size:24px;"><strong>然后像下面使用</strong></span>
<span style="font-size:24px;"><strong><div>{{ input("text", "fname", "fname", "First Name", fname.value, fname.errors) }}</div></strong></span>
<span style="font-size:24px;"><strong><div>{{ input("text", "lname", "lname", "Last Name", lname.value, lname.errors) }}</div></strong></span>
<span style="font-size:24px;"><strong>输出如下</strong></span>
<span style="font-size:24px;"><strong><div></strong></span>
<span style="font-size:24px;"><strong>    <label for="fname">First Name</label></strong></span>
<span style="font-size:24px;"><strong>    <input type="text" name="fname" id="fname" value="Paul"></strong></span>
<span style="font-size:24px;"><strong></div></strong></span>
<span style="font-size:24px;"><strong><div></strong></span>
<span style="font-size:24px;"><strong>    <label for="lname">Last Name</label></strong></span>
<span style="font-size:24px;"><strong>    <input type="text" name="lname" id="lname" value="" class="error"></strong></span>
<span style="font-size:24px;"><strong></div></strong></span>
<span style="font-size:24px;"><strong>import </strong></span>
<span style="font-size:24px;"><strong>允许引入另一个模板的宏进入当前上下文</strong></span>
<span style="font-size:24px;"><strong>参数: </strong></span>
<span style="font-size:24px;"><strong>file: </strong></span>
<span style="font-size:24px;"><strong>引入模板相对模板 root 的相对路径 </strong></span>
<span style="font-size:24px;"><strong>as: </strong></span>
<span style="font-size:24px;"><strong>语法标记 var: 分配给宏的可访问上下文对象</strong></span>
<span style="font-size:24px;"><strong>{% import 'formmacros.html' as form %}</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>{# this will run the input macro #}</strong></span>
<span style="font-size:24px;"><strong>{{ form.input("text", "name") }}</strong></span>
<span style="font-size:24px;"><strong>
</strong></span>
<span style="font-size:24px;"><strong>{# this, however, will NOT output anything because the macro is scoped to the "form" object: #}</strong></span>
<span style="font-size:24px;"><strong>{{ input("text", "name") }}</strong></span>
<span style="font-size:24px;"><strong>filter </strong></span>
<span style="font-size:24px;"><strong>对整个块应用过滤器</strong></span>
<span style="font-size:24px;"><strong>参数: </strong></span>
<span style="font-size:24px;"><strong>filter_name: </strong></span>
<span style="font-size:24px;"><strong>过滤器名字 ... : </strong></span>
<span style="font-size:24px;"><strong>若干传给过滤器的参数 父模板相对模板 root 的相对路径</strong></span>
<span style="font-size:24px;"><strong>{% filter uppercase %}oh hi, {{ name }}{% endfilter %}</strong></span>
<span style="font-size:24px;"><strong>{% filter replace "." "!" "g" %}Hi. My name is Paul.{% endfilter %}</strong></span>
<span style="font-size:24px;"><strong>输出</strong></span>
<span style="font-size:24px;"><strong>OH HI, PAUL</strong></span>
<span style="font-size:24px;"><strong>Hi! My name is Paul!</strong></span>
<span style="font-size:24px;"><strong>spaceless </strong></span>
<span style="font-size:24px;"><strong>尝试移除html标签间的空格</strong></span>
<span style="font-size:24px;"><strong>{% spaceless %}</strong></span>
<span style="font-size:24px;"><strong>{% for num in foo %}</strong></span>
<span style="font-size:24px;"><strong>    <li>{{ loop.index }}</li></strong></span>
<span style="font-size:24px;"><strong>{% endfor %}</strong></span>
<span style="font-size:24px;"><strong>{% endspaceless %}</strong></span>
<span style="font-size:24px;"><strong>输出</strong></span>
<span style="font-size:24px;"><strong><li>1</li><li>2</li><li>3</li></strong></span>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值