一、在Node.js中的配置
注意:首先需要npm安裝swig,并且在項目的入口文件中引入該模塊
1. 引入該模塊
var swig = require('swig');
2. 配置指令
app.engine('html',swig.renderFile); //定義當(dāng)前應(yīng)用所使用的模板引擎
@ 第1個參數(shù) : 模板引擎的名稱,同時也是模板文件的后綴名
@ 第2個參數(shù) : 用于解析處理模板內(nèi)容的方法,會調(diào)用swig對象下面的renderFile方法來對
app.set('views','./views'); //設(shè)置模板文件存放的目錄
@ 第1個參數(shù) : 必須是views
@ 第2個參數(shù) : views文件夾的路徑,相對當(dāng)前app.js的路徑
app.set('view engine','html'); //注冊所使用的模板引擎,作用:是把前面兩步配置的模板引擎,注冊到這個app應(yīng)用中
@ 第1個參數(shù) :必須是view engine
@ 第2個參數(shù) :和定義模板引擎的第一個參數(shù)必須一致
二、基本語法
1. 變量
{{ name }}
2. 屬性
{{ student.name }}
2. if 指令
{% if paragraph %}
<p>如果if后面的條件滿足了,則我這個p標(biāo)簽就會被渲染出來</p>
{% else %}
<a>糟糕,if后面的條件沒有滿足,那就把本標(biāo)簽渲染出來,哈哈哈哈</a>
{% endif %}
3. for 循環(huán)
{% for food in foods %}
<li>{{food.name}}</li>
{% endfor %}
說明:這個for循環(huán)會遍歷foods數(shù)組,最后會渲染出所有的food
4. 解析html
{% autoescape %}
{{mark}}
{% endautoescape %}
注意:如果后臺傳的變量是html語句,比如:
mark = <h1>hello</h1>,
@如果直接{{mark}},則頁面會把整體的mark當(dāng)一個字符串解析到頁面,顯示<h1>hello</h1>;
@實際上我們是想把html語法解析出來,把變量放到{% autoescape %}標(biāo)簽中即可實現(xiàn),顯示 hello
5. 模版繼承
模版文件layout.index:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首頁</title>
</head>
<body>
<h1>你好,</h1>
{% block main %} {% endblock %}
<h1>很高興見到你!</h1>
</body>
index.html繼承模版
{% extends 'layout.html' %}
{% block main %}
小明
{% endblock %}
解釋說明:
swig使用extends來繼承一個模版
swig使用block重寫模版中的某些模塊
首先,定義模版文件;
然后,別的文件繼承這個模版
解釋說明:
block就類似模版中的占位符,我們繼承模版后,可以選擇重寫一些自己需要的block內(nèi)容,上面例子,運行index.html,頁面實際輸出:
你好,
小明
很高興見到你
6. 引入模版
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文章分頁展示</title>
</head>
{% include 'page.html' %}
引入的模版可以使用當(dāng)前文件的上下文信息
7. 過濾器
假如,想要格式化時間,像下面這樣寫
{{addTime|date('Y/m/d H:i:s',-8*60)}}
有這么多內(nèi)置過濾器:
add(value):使變量與value相加,可以轉(zhuǎn)換為數(shù)值字符串會自動轉(zhuǎn)換為數(shù)值。
addslashes:用 \ 轉(zhuǎn)義字符串
capitalize:大寫首字母
date(format[, tzOffset]):轉(zhuǎn)換日期為指定格式
format:格式
tzOffset:時區(qū)
default(value):默認值(如果變量為undefined,null,false)
escape([type]):轉(zhuǎn)義字符
默認: &, <, >, ", '
js: &, <, >, ", ', =, -, ;
first:返回數(shù)組第一個值
join(glue):同[].join
json_encode([indent]):類似JSON.stringify, indent為縮進空格數(shù)
last:返回數(shù)組最后一個值
length:返回變量的length,如果是object,返回key的數(shù)量
lower:同''.toLowerCase()
raw:指定輸入不會被轉(zhuǎn)義
replace(search, replace[, flags]):同''.replace
reverse:翻轉(zhuǎn)數(shù)組
striptags:去除html/xml標(biāo)簽
title:大寫首字母
uniq:數(shù)組去重
upper:同''.toUpperCase
url_encode:同encodeURIComponent
url_decode:同decodeURIComponemt