模板引擎简介和art-template模板引擎基本使用

一、模板引擎概念

模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。

模板引擎不属于特定技术领域,它是跨领域跨平台的概念。在Asp下有模板引擎,在PHP下也有模板引擎,在C#下也有,甚至JavaScript、WinForm开发都会用到模板引擎技术。

二、模板引擎原理

模板引擎的实现方式有很多,最简单的是“置换型”模板引擎,这类模板引擎只是将指定模板内容(字符串)中的特定标记(子字符串)替换一下便生成了最终需要的业务数据(比如网页)。

置换型模板引擎实现简单,但其效率低下,无法满足高负载的应用需求(比如有海量访问的网站),因此还出现了“解释型”模板引擎和“编译型”模板引擎等。

三、模板引擎用途

模板引擎可以让(网站)程序实现界面与数据分离,业务代码与逻辑代码的分离,这就大大提升了开发效率,良好的设计也使得代码重用变得更加容易。

我们司空见惯的模板安装卸载等概念,基本上都和模板引擎有着千丝万缕的联系。模板引擎不只是可以让你实现代码分离(业务逻辑代码和用户界面代码),也可以实现数据分离(动态数据与静态数据),还可以实现代码单元共享(代码重用),甚至是多语言、动态页面与静态页面自动均衡(SDE)等等与用户界面可能没有关系的功能。

划重点

  • 模板引擎是第三方模块。
  • 功能就是让开发者以更加友好的方式拼接字符串,使项目代码更加清晰、更加易于维护。

四、art-template模板引擎

在这里插入图片描述
art-template 是腾讯开发的一个简约、超快的模板引擎。

它采用作用域预声明的技术来优化模板渲染速度,从而获得接近 JavaScript 极限的运行性能,并且同时支持 NodeJS 和浏览器。

GitHub源码地址:https://github.com/aui/art-template

官方中文文档:https://aui.github.io/art-template/zh-cn/index.html

五、art-template模板引擎的安装

在命令行工具中使用 npm install art-template 命令进行下载安装

npm install art-template

六、art-template模板引擎的基本使用步骤

  1. 使用const template = require(‘art-template’)引入模板引擎
  2. 告诉模板引擎要拼接的数据和模板在哪 const html = template(‘模板路径’, 数据);
  3. 使用模板语法告诉模板引擎,模板与数据应该如何进行拼接

art-template代码示例:

<div>
    <span>{{data.name}}</span>
    <span>{{data.age}}</span>
 </div>
// 导入模板引擎模块
 const template = require('art-template');
 // 将特定模板与特定数据进行拼接
 const html = template('./views/index.art',{
    data: {
        name: '张三',
        age: 20
    }
 }); 

七、art-template模板引擎的语法

art-template 支持标准语法原始语法。标准语法可以让模板易读写,而原始语法拥有强大的逻辑表达能力。

标准语法支持基本模板语法以及基本 JavaScript 表达式;原始语法支持任意 JavaScript 语句,这和 EJS 一样。

1、输出

标准语法

{{value}}
{{data.key}}
{{data['key']}}
{{a ? b : c}}
{{a || b}}
{{a + b}}

原始语法

<%= value %>
<%= data.key %>
<%= data['key'] %>
<%= a ? b : c %>
<%= a || b %>
<%= a + b %>

模板一级特殊变量可以使用 $data 加下标的方式访问:

{{$data['user list']}}
2、原文输出

标准语法

{{@ value }}

原始语法

<%- value %>

原文输出语句不会对 HTML 内容进行转义处理,可能存在安全风险,请谨慎使用。

3、条件判断

标准语法

{{if value}} ... {{/if}}
{{if v1}} ... {{else if v2}} ... {{/if}}

原始语法

<% if (value) { %> ... <% } %>
<% if (v1) { %> ... <% } else if (v2) { %> ... <% } %>
4、循环

标准语法

{{each target}}
    {{$index}} {{$value}}
{{/each}}

原始语法

<% for(var i = 0; i < target.length; i++){ %>
    <%= i %> <%= target[i] %>
<% } %>
  • target 支持 arrayobject的迭代,其默认值为 $data
  • $value$index 可以自定义:{{each target val key}}。
5、变量

art-template可以使用第三方模块提供的一些方法,比如日期格式转换的方法
标准语法

{{set temp = data.sub.content}}

原始语法

<% var temp = data.sub.content; %>

代码示例:

下面是 06.art 文件

//html骨架
{{extend './common/layout.art'}}

{{block 'content'}}
{{ dateFormat(time, 'yyyy-mm-dd')}}
{{/block}}

下面是 06.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('06', {
	time: new Date()
});
//输出
console.log(html);

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

6、子模板

使用子模板可以将网站公共区块(头部、底部)抽离到单独的文件中,方便维护。

标准语法

{{include './header.art'}}
{{include './header.art' data}}

原始语法

<% include('./header.art') %>
<% include('./header.art', data) %>
  • data 数默认值为 $data;标准语法不支持声明 object 与 array,只支持引用变量,而原始语法不受限制。
  • art-template 内建 HTML 压缩器,请避免书写 HTML 非正常闭合的子模板,否则开启压缩后标签可能会被意外“优化。
7、模板继承

使用模板继承可以将网站HTML骨架抽离到单独的文件中,其他页面模板可以继承骨架文件。

模板继承允许你构建一个包含你站点共同元素的基本模板“骨架”。

在这里插入图片描述
在这里插入图片描述
标准语法

{{extend './layout.art'}}
{{block 'head'}} ... {{/block}}

原始语法

<% extend('./layout.art') %>
<% block('head', function(){ %> ... <% }) %>

模板继承代码示例

layout.art 文件

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	{{block 'link'}} {{/block}}
</head>
<body>
	{{block 'content'}} {{/block}}
</body>
</html>

05.art 文件

{{extend './common/layout.art'}}

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

{{block 'link'}}
<link rel="stylesheet" type="text/css" href="./main.css">
{{/block}}

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);

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

8、模板配置
  • 向模板中导入变量 template.defaults.imports.变量名 = 变量值;
  • 设置模板根目录 template.defaults.root = 模板目录
  • 设置模板默认后缀 template.defaults.extname = ‘.art’
  • 点击链接查看更多

你的每一份支持,都是我源源不断的动力!

发布了306 篇原创文章 · 获赞 263 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_44721831/article/details/104134716