zoukankan      html  css  js  c++  java
  • 模板引擎art-template

    模板引擎的基础概念

    • 模板引擎

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

      • 在命令行工具中使用 npm install art-template 命令进行下载
      • 使用const template = require('art-template')引入模板引擎
      • 告诉模板引擎要拼接的数据和模板在哪 const html = template(‘模板路径’, 数据);
      • 使用模板语法告诉模板引擎,模板与数据应该如何进行拼接
     // 导入模板引擎模块
     const template = require('art-template');
     // 将特定模板与特定数据进行拼接
     const html = template('./views/index.art',{
        data: {
            name: '张三',
            age: 20
        }
     }); 
    
     <div>
        <span>{{data.name}}</span>
        <span>{{data.age}}</span>
     </div>
    
    • 在命令行中执行,返回网页字符串
    // 导入模板引擎
    const template = require('art-template');
    const path = require('path');
    const views = path.join(__dirname, 'views', 'index.art');
    // template方法是用来拼接字符串的
    // 1. 模板路径 绝对路径
    // 2. 要在模板中显示的数据 对象类型
    // 3. 返回拼接好的字符串
    const html = template(views, {
        name: 'sunny',
        age: 20
    });
    console.log(html);
    

    模板引擎语法

    • 模板语法

      • art-template 同时支持两种模板语法:标准语法和原始语法。
      • 标准语法可以让模板更容易读写,原始语法具有强大的逻辑处理能力。
    • 输出:简单运算

      • 将某项数据输出在模板中,标准语法和原始语法如下:
        • 标准语法:{{ 数据 }}
        • 原始语法:<%= 数据 %>
      <!-- 标准语法 -->
     <h2>{{value}}</h2>
     <h2>{{a ? b : c}}</h2>
     <h2>{{a + b}}</h2>
      <!-- 原始语法 -->
     <h2><%= value %></h2>
     <h2><%= a ? b : c %></h2>
     <h2><%= a + b %></h2>
    

    原文输出

    • 原文输出
      • 如果数据中携带HTML标签,默认模板引擎不会解析标签,会将其转义后输出
        • 标准语法:{{@ 数据 }}
        • 原始语法:<%- 数据 %>
    <!-- 标准语法 -->
    {{@ content }}
    <!-- 原始语法 -->
    <%- content %>
    

    条件判断

    • 条件判断
      • 在模板中可以根据条件来决定显示哪块HTML代码
     <!-- 标准语法 --> 
     {{if 条件}} ... {{/if}}
     {{if v1}} ... {{else if v2}} ... {{/if}}
     <!-- 原始语法 -->
     <% if (value) { %> ... <% } %>
     <% if (v1) { %> ... <% } else if (v2) { %> ... <% } %>
    
    • 标准语法
    {{if age > 18}}
        年龄大于18
    {{else if age < 15}}
        年龄小于15
    {{else}}
        年龄不符合
    {{/if}}
    
    • 原始语法
    <% if(age>18){ %>
        年龄大于18
    <% }else if(age<15){ %>
        年龄小于15
    <% }else{ %>
        年龄不符合
    <% } %>
    

    循环语法

    • 循环语法
      • 标准语法:{{each 数据}} {{/each}}
      • 原始语法:<% for() { %> <% } %>
     <!-- 标准语法 -->
     {{each target}}
         {{$index}} {{$value}}
     {{/each}}
      <!-- 原始语法 -->
     <% for(var i = 0; i < target.length; i++){ %>
         <%= i %> <%= target[i] %>
     <% } %>
    
    • 案例
    <ul>
    {{each user}}
        <li>
            {{$index}} {{@ $value.name}}
            {{$index}} {{@ $value.age}}
            {{$index}} {{@ $value.sex}}
        </li>
    {{/each}}
    </ul>
    <ul>
        <% for(var i=0; i<user.length; i++){ %>
            <li>
                <%= i %> <%- user[i].name %>
                <%= i %> <%- user[i].age %>
                <%= i %> <%- user[i].sex %>
            </li>
        <% } %>
    </ul>
    
    // 导入模板引擎
    const template = require('art-template');
    const path = require('path');
    const views = path.join(__dirname, 'views', '03.art');
    // template方法是用来拼接字符串的
    // 1. 模板路径 绝对路径
    // 2. 要在模板中显示的数据 对象类型
    // 3. 返回拼接好的字符串
    const html = template(views, {
        user: [{
            name: 'Tom',
            age: 15,
            sex: '男'
        },{
            name: 'Jerry',
            age: 16,
            sex: '男'
        },{
            name: 'Merry',
            age: 18,
            sex: '女'
        }]
    });
    console.log(html);
    

    子模版

    • 子模版
      • 使用子模板可以将网站公共区块(头部、底部)抽离到单独的文件中。
      • 标准语法:{{include '模板'}}
      • 原始语法:<%include('模板') %>
      <!-- 标准语法 -->
     {{include './header.art'}}
      <!-- 原始语法 -->
     <% include('./header.art') %>
    
    {{ include './common/header.art' }}
    <% include('./common/header.art') %>
    <div>{{msg}}</div>
    <% include('./common/footer.art') %>
    {{ include './common/footer.art' }}
    

    模板继承

    • 模板继承
      • 使用模板继承可以将网站HTML骨架抽离到单独的文件中,其他页面模板可以继承骨架文件
     <!doctype html>
     <html>
         <head>
             <meta charset="utf-8">
             <title>HTML骨架模板</title>
             {{block 'head'}}{{/block}}
         </head>
         <body>
             {{block 'content'}}{{/block}}
         </body>
     </html>
    
     <!--index.art 首页模板-->
     {{extend './layout.art'}}
     {{block 'head'}} <link rel="stylesheet" href="custom.css"> {{/block}}
     {{block 'content'}} <p>This is just an awesome page.</p> {{/block}}
    
    • 案例
    <!-- 骨架模板 layout.art -->
    <!DOCTYPE html>
    <html lang='en'>
    <head>
        <meta charset="UTF-8">
        <title>模板继承</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}}
    
    // NodeJS服务器操作 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);
    

    模板配置

    • 模板配置
      • 日期格式化模块 https://www.npmjs.com/package/dateformat
      • 向模板中导入变量 template.defaults.imports.变量名 = 变量值;
      • 设置模板根目录 template.defaults.root = 模板目录
      • 设置模板默认后缀 template.defaults.extname = '.art'
    // 导入模板引擎
    const template = require('art-template');
    const path = require('path');
    const dateFormat = require('dateformat');
    // 设置模板的跟目录
    template.defaults.root = path.join(__dirname, 'views');
    // 设置模板默认后缀
    template.defaults.extname = '.art'
    // 导入模板变量
    template.defaults.imports.dateFormat = dateFormat;
    const html = template('06', {
        time: new Date()
    });
    console.log(html);
    console.log(template('07.html', {}));
    
    <!-- 06.art -->
    {{@ dateFormat(time, 'yyyy-mm-dd') }}
    
    <!-- 07.html -->
    <h1>我是HTML文件</h1>
    
  • 相关阅读:
    虚函数
    类的继承
    析构
    构造
    枚举类型
    c++中的静态类型 static
    c++中的类
    sizeof和strlen的区别
    剑指36 二叉搜索书与双向链表
    剑指35 复杂链表的复制
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/13664721.html
Copyright © 2011-2022 走看看