Swig模板引擎
2016-03-23 21:21:26 1 举报
AI智能生成
Swig模板引擎是一个基于C/C++的模板系统,它允许开发者使用类似于HTML的模板语法来生成C/C++代码。Swig的主要目标是提高代码重用性、可读性和可维护性。通过将逻辑和数据分离,Swig使得开发人员可以专注于业务逻辑的开发,而不需要关心底层的实现细节。此外,Swig还支持多种编程范式,如面向对象、过程式等,以满足不同项目的需求。总之,Swig模板引擎为C/C++开发者提供了一个灵活、高效且易于使用的模板解决方案,有助于提高软件开发的效率和质量。
作者其他创作
大纲/内容
Swig API
TAGS
autoescape:true/false/"js"/"html"
block:块名,用于模板继承中,覆盖父模块中同名的块
else:没有值
elif:类似else,可以接一个逻辑判断值
extends:父模块的相对地址,用于模块继承,例如{% extends "./layout.html" %}
filter:过滤器名称
for:
if:
import:导入宏,使用macro定义宏
include:导入文件路径
macro:定义可复用的宏,可以使用import导入另一个模板
parent:直接插入父模块中同名块的内容,使用在模板继承中
raw:不做任何处理直接插入,使用插入css、js
set:设置变量值
spaceless:移除HTML标签之间的空白
开始使用
安装:npm install swig
基础用法:
var swig = require('swig');
// Compile a file and store it, rendering it later
var tpl = swig.compileFile('/path/to/template.html');
console.log(tpl({ article: { title: 'Swig is fun!' }}));
// Immediately render a Swig template from a string
console.log(swig.render('{% if foo %}Hooray!{% endif %}', { locals: { foo: true }}));
变量:
1、包括在{{}}中间,所有变量会自动HTML转义,函数输出例外
2、访问对象熟悉可以用点号或者中括号,如{{foo.bar}}等价于{{foo['bar']}},但是如果属性名中有非数字及字母的字符
则必须用中括号,如{{foo['bar-a']}}
3、如果变量没有定义,则输出空字符,如果变量为false、null、0,则直接输出
4、变量输出可以使用过滤器,比如
{{ name|title }} was born on {{ birthday|date('F jS, Y') }}
// => Jane was born on July 6th, 1985
5、变量也可以是函数,比如
var locals = { mystuff: function mystuff() { return '<p>Things!</p>'; } };
swig.render('{{ mystuff() }}', { locals: locals });
// => <p>Things!</p>
无论如何配置Swig,函数的输出不会做HTML编码,如果要做编码可以使用过滤器,比如
{{ mystuff()|escape }}
// => <p>Things</p>
6、逻辑TAGS
{% if foo %}bar{% endif %}
// Create a list of people, only if there are items in the people array
{% for person in people %}
{% if loop.first %}<ol>{% endif %}
<li>{{ person.name }}</li>
{% if loop.last %}</ol>{% endif %}
{% endfor %}
结尾还可以增加更多语意,这些都会被忽略掉,只是用来便于理解
{% block tacos %}
//...
{% endblock tacos %}
{% block burritos %}
{% if foo %}
// ...
{% endif the above will render if foo == true %}
{% endblock burritos %}
7、注释
{#
This is a comment.
It will be fully stripped and ignored during parsing.
#}
8、空白控制
模板中的任何空白字符都会输出,但是你可以根据逻辑TAG来控制空白的输出
// seq = [1, 2, 3, 4, 5]
{% for item in seq -%}{{ item }}
{%- endfor %}
// => 12345
9、模板继承
使用extends和block进行继承
模板加载器
内置加载器
swig.loaders.fs
swig.loaders.memory
自定义加载器
实现resolve和load方法
0 条评论
下一页