Node.js 模板引擎

模板引擎

一、什么是模板引擎?
模板引擎是第三方模块,是一个将页面模板和要显示的数据结合生成HTML页面的工具让开发者以更友好的方式拼接字符串,使项目代码更加清晰,更加易于维护。
二、art-template模板引擎
1.使用:

  • 在命令行工具中使用npm install are-template安装
  • 使用const template = require(‘art-template’)引入模板引擎
  • 需要创建两个文件,一个js文件,一个art文件
  • 告诉模板引擎要拼接的数据和模板在哪const html = template(‘模板路径’,数据)
app.js文件
//导入模板引擎
const template = require('art-template')
const path = require('path')
//模板路径为绝对路径
const views = path.join(__dirname, 'views', 'index.art')
//template方法用来拼接字符串,返回值为字符串
const html = template(views, {
    name : '张三' ,
    age : 20
})
console.log(html)
index.art文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    {{name}}
    {{age}}
</body>
</html>

运行结果:
在这里插入图片描述
2.模板语法

  • art-template同时支持两种模板语法:标准语法和原始语法。
  • 标准语法可以让模板更容易读写,原始语法具有强大的逻辑处理能力。
    • 标准语法:{{数据}}
    • 原始语法:<%= 数据%>
01.js文件
const template = require('art-template')
const path = require('path')
const views = path.join(__dirname, 'views', '01.art')
const html = template(views, {
    name : '张三' ,
    age : 20 ,
})
console.log(html)
01.art文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!--标准语法--!>
    <p>{{name}}</p>
    <p>{{1 + 1}}</p>
    <p>{{1 + 1 == 2 ? 'Y' : 'N'}}</p>
    <p>{{content}}</p>
    <!--原始语法--!>
    <p><%= name %></p>
    <p><%= 1 + 1 %></p>
    <p><%= 1 + 1 == 2 ? 'Y' : 'N' %></p>
    <p><%= content %></p>
</body>
</html>

运行结果:
在这里插入图片描述

  • 1)原文输出
    如果数据中携带HTML标签,默认模板引擎不会解析标签,会将其转义后输出。

    • 标准语法:{{@数据}}
    • 原始语法:<%-数据 %>
	02.js文件
	const template = require('art-template')
	const path = require('path')
	const views = path.join(__dirname, 'views', '02.art')
	const html = template(views, {
	    a : '<h1>我是标题标签<h1>',
	    b : '<div>我是盒子</div>'
	})
	console.log(html)
	02.art文件
	<!DOCTYPE html>
	<html lang="en">
	<head>
	    <meta charset="UTF-8">
	    <meta http-equiv="X-UA-Compatible" content="IE=edge">
	    <meta name="viewport" content="width=device-width, initial-scale=1.0">
	    <title>Document</title>
	</head>
	<body>
	    <!--标准语法--!>
	    <p>{{a}}</p>
	    <p>{{b}}</p>
	    <p>{{@a}}</p>
	    <p>{{@b}}</p>
	    <!--原始语法--!>
	    <p><%= a %></p>
	    <p><%= b %></p>
	    <p><%- a %></p>
	    <p><%- b %></p>
	</body>
	</html>
 - 运行结果:

在这里插入图片描述

  • 2)条件判断
    • 在模板中可以根据条件来决定显示哪块HTML代码。
    • 标准语法:
      • {{if 条件}} … {{/if}}
      • {{if v1}} … {{else if v2}} … {{/if}}
    • 原始语法
      • <% if (value) { %> … <% } %>
      • <% if (v1) { %> … <% } %> else if (v2) { %> … <% } %>
	03.js
	const template = require('art-template')
	const path = require('path')
	const views = path.join(__dirname, 'views', '03.art')
	const html = template(views, {
	    name : '张三' ,
	    age : 20 ,
	})
	console.log(html)
	03.art
	<!DOCTYPE html>
	<html lang="en">
	<head>
	    <meta charset="UTF-8">
	    <meta http-equiv="X-UA-Compatible" content="IE=edge">
	    <meta name="viewport" content="width=device-width, initial-scale=1.0">
	    <title>Document</title>
	</head>
	<body>
	    <!--标准语法--!>
	    {{if age > 18}}
	        年龄大于18
	    {{else if age < 15}}
	        年龄小于15
	    {{else}}
	    年龄不符合要求
	    {{/if}}
	    <!--原始语法--!>
	    <% if(age > 18) { %>
	        年龄大于18
	    <% } else if (age < 15) { %>
	        年龄小于15
	    <% } else { %>
	         年龄不符合要求
	    <% } %>
	</body>
	</html>
 - 运行结果

在这里插入图片描述

  • 3 循环
    在这里插入图片描述
	04.js
	const template = require('art-template')
	const path = require('path')
	const views = path.join(__dirname, 'views', '04.art')
	const html = template(views, {
	    users: [
	        {
	            name : 'aa' ,
	            age : 20 ,
	            sex : '男'
	        },
	        {
	            name : 'bb' ,
	            age : 18 ,
	            sex : '女'
	        },
	        {
	            name : 'cc' ,
	            age : 22 ,
	            sex : '男'
	        }
	    ]
	})
	console.log(html)

04.art
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!--标准语法--!>
    <ul>
        {{each users}}
            <li>
                {{$value.name}}
                {{$value.age}}
                {{$value.sex}}
            </li>
        {{/each}}
    </ul>
    <!--原始语法--!>
    <ul>
        <% for (var i = 0; i < users.length; i++) { %>
            <li>
                <%= users[i].name %>                
                <%= users[i].age %>
                <%= users[i].sex %>
            </li>
        <% }
        %>
    </ul>   
</body>
</html>
- 运行结果:

在这里插入图片描述

  • 3 .子模板
    • 使用子模版可以将网站公共区块(头部、底部)抽离到单独的文件中。
    • 标准语法:{{include ‘模板’}} include为关键字
    • 原始语法:<%include(‘模板’) %> include为方法 在这里插入图片描述
05.js
const template = require('art-template')
const path = require('path')
const views = path.join(__dirname, 'views', '05.art')
const html = template(views, {
    msg : '我是首页'
})
console.log(html)
./common/header.art
我是头部
./common/footer.art
我是底部
05.art
{{include './common/header.art'}}
{{include './common/footer.art'}}
<div>{{msg}}</div>
<% include('./common/header.art')%>
<% include('./common/footer.art')%>
- 运行结果:

在这里插入图片描述

  • 4.模板继承
    • 使用模板继承可以将网站HTML骨架抽离到单独的文件中,其他网页可以继承骨架文件。
      在这里插入图片描述
06.js
const template = require('art-template')
const path = require('path')
const views = path.join(__dirname, 'views', '06.art')
const html = template(views, {
    msg : '首页模板'
})
console.log(html)
06.art
{{extend './common/layout.art'}}

{{block 'content'}}
<p>{{msg}}</p>
{{/block}}

{{block 'link'}} 
<link rel="stylesheet" type="text/css" href="./main.css">
{{/block}}
./common/layout.art
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    {{block 'link'}} {{/block}}
</head>
<body>
    {{block 'content'}} {{/block}}
</body>
</html>
- 运行结果:

在这里插入图片描述

  • 5.模板配置
    • 向模板中导入变量template.defaults.imports.变量名 = 变量值
07.js
const template = require('art-template')
const path = require('path')
const dateFormat = require('dateformat')
const views = path.join(__dirname, 'views', '07.art')
//导入模板变量
template.defaults.imports.dateFormat = dateFormat
const html = template(views, {
    time : new Date()
})
console.log(html)
07.art
{{ dateFormat(time, 'yyyy-mm-dd') }}
 - 运行结果:

在这里插入图片描述

  • 设置模板根目录 template.defaults.root = 模板目录
  • 设置模板默认后缀template.defaults.extname = ‘.art’
08.js
const template = require('art-template')
const path = require('path')
const dateFormat = require('dateformat')

//设置模板的根目录
template.defaults.root = path.join(__dirname, 'views')
//导入模板变量
template.defaults.imports.dateFormat = dateFormat
//设置模板的默认后缀
template.defaults.extname = '.art'
const html = template('08', {
    time : new Date()
})
console.log(html)
08.art
{{ dateFormat(time, 'yyyy-mm-dd') }}
- 运行结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值