【转】Swig Getting Started
Installation
Via NPM:
$ npm install swig --save
Basic Usage
Swig has multiple ways to compile and render templates. Check the API documentation for more detailed information and usage.
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 }}));
Variables
Variables that are passed to templates can be output using double-curly-brackets: . All variable output is automatically autoescaped, with the exception of function output.
Notation
Accessing properties of objects can be done using either dot-notation or bracket-notation. The following examples are equivalent:
{{ foo.bar }}
// is equivalent to
{{ foo['bar'] }}
However, notation style follows the same rules as JavaScript. If a key includes non-alpha-numeric characters, it must be accessed using bracket-notation, not dot-notation.
Bad!
{{ foo.chicken-tacos }}
The above would be the same as attempting to subract tacos from foo.chicken: {{ foo.chicken - tacos }}
Good!
{{ foo['chicken-tacos'] }}
Undefined vs Falsy Values
If a variable is not defined, don't worry, your template won't explode. Instead, an empty-string will be output in its place. However, falsy values like null, false, 0 will be rendered as they are.
Filters
Variables can be modified using using special, chainable control structures called Filters:
{{ name|title }} was born on {{ birthday|date('F jS, Y') }}
// =>Jane was born on July 6th, 1985
Functions
Variables can also be JavaScript functions. It is important to note that, regardless of your autoescape setting, functions will not be auto-escaped.
var locals = { mystuff: function mystuff() { return '<p>Things!</p>'; } };
swig.render('{{ mystuff() }}', { locals: locals });
// => <p>Things!</p>
If you want to enforce escaping output on functions, just pipe them to the escape filter.
{{ mystuff()|escape }}
// => <p>Things</p>
Logic Tags
Swig includes some basic operational blocks, called Tags, for helping you control output on a larger scale than variables. Tags are written using curly-percent syntax: .
{% 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 %}
end tags may also have any set of extra context within them, and will just be ignore. This is useful for scoping and understanding which block you are closing and where.
{% block tacos %}
//...
{% endblock tacos %}
{% block burritos %}
{% if foo %}
// ...
{% endif the above will render if foo == true %}
{% endblock burritos %}
View the Tags documentation for a full list of tags and usage instructions.
Comments
Comment tags are simply ignored by the parser. They will removed before your templates are rendered so that no one can see them unless they have access to your source code. Comments are written using the curly-hash syntax:
{#
This is a comment.
It will be fully stripped and ignored during parsing.
#}
Whitespace Control
Any whitespace in your templates is left in your final output templates. However, you can control the whitespace around logic tags by using whitespace controls.
To remove whitespace, simply put a dash (-) at the beginning or end of your tag to remove the preceding or following whitespace, respectively.
// seq = [1, 2, 3, 4, 5]
{% for item in seq -%}{{ item }}
{%- endfor %}
// =>12345
Note: there must not be any space between the tag open/close mark and the dash.
Template Inheritance
Swig uses extends & block for template inheritance.
layout.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>{% block title %}My Site{% endblock %}</title>
{% block head %}
<link rel="stylesheet" href="main.css">
{% endblock %}
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>
index.html
{% extends 'layout.html' %}
{% block title %}My Page{% endblock %}
{% block head %}
{% parent %}
<link rel="stylesheet" href="custom.css">
{% endblock %}
{% block content %}
<p>This is just an awesome page.</p>
{% endblock %}
Using Swig with Express.js
Swig is easily compatible with Express, the simple web application framework for node. The following is a basic example of integrating Swig with Express:
var app = require('express')(),
swig = require('swig'),
people;
// This is where all the magic happens!
app.engine('html', swig.renderFile);
app.set('view engine', 'html');
app.set('views', __dirname + '/views');
// Swig will cache templates for you, but you can disable
// that and use Express's caching instead, if you like:
app.set('view cache', false);
// To disable Swig's cache, do the following:
swig.setDefaults({ cache: false });
// NOTE: You should always cache templates in a production environment.
// Don't leave both of these to `false` in production!
app.get('/', function (req, res) {
res.render('index', { /* template locals context */ });
});
app.listen(1337);
console.log('Application Started on http://localhost:1337/');
【转】Swig Getting Started的更多相关文章
- Node.js-视图引擎【1】-Swig集成express的安装与配置
node.js视图引擎,选来选去发现Swig最符合我的胃口哈哈. 一.安装Swig视图引擎 npm install -g swig 二.在node.js代码中配置如下 var app = requir ...
- express+gulp构建项目(五)swig模板
这里的文件负责配置swig模板引擎. index.js var jsonHash = require('./json_file'); var staticTag = require("./t ...
- Python、Ruby中的SWIG使用案例
案例一:Python通过SWIG使用C码 linux系统 照着文档[1]做就是了~! 案例二:Python程序调用张华平博士最新发布的中文分词库“NLPIR – ICTCLAS2013”为例~! wi ...
- 安装m2crypto报错swig error : Unrecognized option -builtin
M2Crypto 是最完整的为 Python 包装 OpenSSL 的 RSA,DSA,DH,EC,HMACs,消息摘要,对称密码算法(包括AES)的一个库工具.而自从 M2Crypto 升级到版本 ...
- swig之于c++
[namespace] namespace nsTest1 { int nsAdd(int a, int b) { return a + b; } } namespace nsTest2 { int ...
- crossplatform---Nodejs in Visual Studio Code 05.Swig+Bootstrap
1. 开始 准备好Express+Swig的练习代码:https://github.com/Mengkzhaoyun/nodepractise 准备好AdminLTE后台管理模版:https://ww ...
- Swig 使用指南
如何使用 API swig.init({ allowErrors: false, autoescape: true, cache: true, encoding: 'utf8', filters: { ...
- Demo Swig
演示使用swig工具创建c语言的java接口,生成.so库和java接口文件. 在此之前先要安装swig,安装方法:sudo apt-get install swig 1.使用eclipse创建工程. ...
- html 模板 swig 预编译插件 grunt-swig-precompile
GitHub grunt-swig-precompile NPM grunt-swig-precompile 在书写前端静态页面的时候,每个页面总在书写很多重复的标签. 为了提高效率,结合 swig. ...
- 在Python中调用C++,使用SWIG
http://www.coder4.com/archives/2141 SWIG:Simplified Wrapper and Interface Generator,顾名思义,就是将C/C++包装为 ...
随机推荐
- poj1015 正解--二维DP(完全背包)
题目链接:http://poj.org/problem?id=1015 错误解法: 网上很多解法是错误的,用dp[i][j]表示选择i个人差值为j的最优解,用path[i][j]存储路径,循环次序为“ ...
- Oracle的下载、安装和配置
win10下Oracle的下载.安装和配置 --------------siwuxie095 1.首先到Oracle官网下载Oracle,中文版官网,传送阵:点 ...
- QT隐式数据共享
QT中许多C++类使用了隐式数据共享,最小化资源拷贝.当作为参数传递时,实际只传递了指针,这是底层完成的,程序员无需担心,即使是在多线程中,从Qt4开始: 记住,尽量使用const迭代器,vector ...
- ueditor使用注意
问题1:后端配置项没有正常加载,上传插件不能正常使用! 我用的是开发版,1.4.3.3 .Net版 网上查了很多,后来发现只是配置的问题而已. 1.在根目录下:config.json 其中有Img上传 ...
- .NET获得上传图片宽高
代码: //图片大小限制--------------------------- System.Drawing.Image txtStoryimage = System.Drawing.Image.Fr ...
- Golang之(for)用法
地鼠每次选好了一块地,打洞,坚持半个月发现地下有块石头,然后他就想绕路了...殊不知绕路只会让它离成果越来越远 package main import ( "fmt" " ...
- Linux安装和配置Vim7.4
一.简介 Vim是一个类似于Vi的文本编辑器,不过在Vi的基础上增加了很多新的特性,Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体.1999 年Emacs被选为L ...
- StartServiceCtrlDispatcher
服务程序通常编写成控制台类型的应用程序,总的来说,一个遵守服务控制管理程序接口要求的程序 包含下面三个函数: 1.服务程序主函数(main):调用系统函数 StartServiceCtrlDispat ...
- JAVA Get UUID
UUID是通用唯一标识码(Universally Unique Identifier),通过开源软件基金会(OSF)设立的一种算法生成.它的主要作用就是保证生成的字符串在同一时空中所有机器上都是唯一的 ...
- Sketch小妙招:在线分享设计
Sketch是很多产品经理.UI.UX设计师常使用的一款的设计工具,但是我在使用Sketch的过程中发现了一个让我困扰的事儿,或者说它缺少了一个我非常需要的服务:在线分享设计.可能很多使用Sketch ...