swig是JS模板引擎,它有如下特点:
{{ foo.bar }}
{{ foo['bar'] }}
//如果变量未定义,输出空字符。
extends
使当前模板继承父模板,必须在文件最前 参数: file
父模板相对模板 root 的相对路径,将在后面介绍如何实现模板继承。
block
定义一个块,使之可以被继承的模板重写,或者重写父模板的同名块 参数: name
块的名字,必须以字母数字下划线开头
parent
将父模板中同名块注入当前块中
include
包含一个模板到当前位置,这个模板将使用当前上下文 参数: file
包含模板相对模板 root 的相对路径
{% include "a.html" %}
{% include "template.js" %}
//将引入的文件内容放到被引用的地方
raw
停止解析标记中任何内容,所有内容都将输出 参数: file
父模板相对模板 root 的相对路径
for
遍历对象和数组 参数:x 当前循环迭代名
in: 语法标记 y: 可迭代对象。
{% for x in y %}
<p> {{ x }}p>
{% endfor %}
if
条件语句,参数:
接受任何有效的 JavaScript条件语句
{% if foo %}
<p> foo is true p>
{% else if "foo" in bar %}
<p> foo in barp>
{% else %}
<p> fail p>
{% endif %}
autoescape
改变当前变量的自动转义行为 参数: on
当前内容是否转义 type: 转义类型,js 或者 html,默认 html
input = '<p>Hello "you" & \'them\'p>';
{% autoescape false %}
{{ input }}
{% endautoescape %}
// <p>Hello "you" & 'them'p>
{% autoescape true %}
{{ input }}
{% endautoescape %}
//<p>Hello "you" & 'them' </p>
{% autoescape true "js" %}
{{ input }}
{% endautoescape %}
// \u003Cp\u003EHello \u0022you\u0022 & \u0027them\u0027\u003C\u005Cp\u003E
set
设置一个变量,在当前上下文中复用
{% set foo = [0, 1, 2, 3, 4, 5] %}
{% for num in foo %}
<li>{{ num }}li>
{% endfor %}
模板继承
Swig 使用 extends 和 block 来实现模板继承
example:
//layout.html
<html>
<head>
<meta charset="utf-8">
<title>{% block title %}My Site{% endblock %}title>
{% block head %}
{% endblock %}
head>
<body>
{% block content %}{% endblock %}
body>
html>
//index.html
{% extends './layout.html' %}
{% block title %}My Page{% endblock %}
{% block head %}
{% parent %}
{% endblock %}
{% block content %}
<p>This is just an awesome page.p>
<h1>hello,lego.h1>
<script>
//require('pages/index/main');
script>
{% endblock %}
swig模板经过编译后:
<html>
<head>
<meta charset="utf-8">
<title>My Pagetitle>
<body>
<p>This is just an awesome page.p>
<h1>hello,lego.h1>
<p>testp>
<script>
//require('pages/index/main');
script>
body>
html>
swig使用广泛,在很多框架中使用,例如node框架yog2中,相对于其他js模板引擎,有它的好处:
1、与jade相比,更简单,jade是一个处女座的人才可以完全适应去写的,跟Python有的一拼;而且jade是一种面向对象的模板引擎,看起来并不是那么像是html了,但是关于性能的问题,尚未深入研究过。
2、与ejs相比,ejs写起来比较麻烦,格式傻傻分不清楚,满眼的符号,尤其是他的{},和jsp有的一拼:
<% datas.forEach(function(item) { %>
<li>姓名:<%= item.name %> 年龄:<%= item.age %> 公司:<%= item.comp %>li>
<% }); %>
在性能方面,又一遍关于ejs和swig性能比较的文章,可以看出swig性能还是不错的。