Pug.js tutorial

pug.js 教程介绍了 Pug 模板引擎。

哈巴狗

Pug 是一个 JavaScript 模板引擎。它是一个高性能的模板引擎,深受 Haml 的影响,并使用 JavaScript 为 Node.js 和浏览器实现。 Pug 的前身是 calle Jade。

模板引擎

模板引擎或模板处理器是一个库,旨在将模板与数据模型结合起来以生成文档。模板引擎通常用于生成大量电子邮件、源代码预处理或生成动态 HTML 页面。

我们创建了一个模板引擎,我们在其中定义了静态部分和动态部分。动态部分稍后将替换为数据。渲染函数随后将模板与数据结合起来。

设置 Pug.js

首先,我们安装 Pug.js。

$ npm init -y

我们启动一个新的 Node 应用程序。

$ npm i pug

我们用pug安装nmp i pug模块。

Pug.js 从字符串渲染

我们从一个从字符串呈现的非常简单的示例开始。

import { render } from 'pug';

const template = 'p #{name} is a #{occupation}';

const data = { 'name': 'John Doe', 'occupation': 'gardener' };
const output = render(template, data);

console.log(output);

该示例显示了字符串模板的输出。

import { render } from 'pug';

我们从 pug 模块加载 render 函数。

const template = 'p #{name} is a #{occupation}';

这是我们简单的字符串模板。第一个值是要渲染的标签。此外,我们添加两个变量:nameoccupation。要输出我们使用#{} 语法的变量。

const data = { 'name': 'John doe', 'occupation': 'gardener' };

这是我们传递给模板引擎的数据。

const output = render(template, data);

render 函数采用模板字符串和上下文数据。它将两者都编译成最终的字符串输出。

$ node app.js
<p>John Doe is a gardener</p>

Pug.js 编译文件

compileFile 函数将 Pug 模板从文件编译为函数,该函数可以使用不同的局部变量多次呈现。

p Hello #{name}!

这是模板文件;它有一个 .pug 扩展名。

import { compileFile } from 'pug';

const cfn = compileFile('template.pug');

const res = cfn({'name': 'John Doe'});
console.log(res);

const res2 = cfn({'name': 'Roger Roe'});
console.log(res2);

我们将模板编译为一个函数,并使用两个不同的本地数据调用该函数。

$ node app.js
<p>Hello John Doe!</p>
<p>Hello Roger Roe!</p>

Pug.js 渲染文件

renderFile 函数从文件编译 Pug 模板,并将其与局部变量一起呈现为 HTML 字符串。

doctype html
html
  body
    ul
      li Name: #{name}
      li Occupation: #{occupation}

在模板中,我们有一个带有无序列表的小型 HTML 文档。我们有两个变量。

import { renderFile } from 'pug';

const options = { 'pretty': true }
const locals = { 'name': 'John doe', 'occupation': 'gardener', };

const res = renderFile('template.pug', Object.assign(locals, options));

console.log(res);

我们用Object.assign合并局部变量和选项;

const options = { 'pretty': true }

在选项图中,我们设置漂亮的打印。 (请注意,此选项已弃用。)

$ node app.js
<!DOCTYPE html>
<html>
  <body>
    <ul>
      <li>Name: John doe</li>
      <li>Occupation: gardener</li>
    </ul>
  </body>
</html>

Pug.js 传递数据列表

在下面的示例中,我们将数据列表传递给模板引擎并对其进行处理。

doctype html
html
  body
    ul
      each e in names
        li= e

在模板中,我们使用each 形式遍历传递给模板的数据列表。

import { renderFile } from 'pug';

const names = ['John Doe', 'Roger Roe', 'Paul Smith', 'Rebecca Jordan'];
const res = renderFile('template.pug', { 'names': names });

console.log(res);

我们定义了一个名字列表。该列表通过 names 选项传递给选项中的模板引擎。

Pug.js 条件

条件是使用if/else 关键字创建的。

doctype html
html
  head
    style.
      .emp { background: lightGreen }

  body
    if emp
      p.emp Today is #{today}
    else
      p Today is #{today}

在模板中,我们根据 emp 选项显示强调的段落。

style.

使用点语法,我们可以将一段文本传递给标签。

import { renderFile } from 'pug';
import { writeFileSync } from 'fs';

const today = new Date().toLocaleDateString()
const emp = false;

const output = renderFile('template.pug', {'today': today, 'emp': emp});

writeFileSync('index.html', output);

我们获取当前数据并将其沿emp 变量传递给模板引擎。 emp 确定输出是否被强调。生成的输出将写入带有writeFileSync 的文件。

Pug.js 表

在下面的示例中,我们从 CSV 文件中读取数据并将其呈现在 HTML 表中。

$ npm i csv

我们使用csv模块来处理CSV数据。

id,name,price
1,Audi,52642
2,Mercedes,57127
3,Skoda,9000
4,Volvo,29000
5,Bentley,350000
6,Citroen,21000
7,Hummer,41400
8,Volkswagen,21600
9,Toyota,26700

此 CSV 数据呈现在 HTML 表格中。

doctype html
html

  body
    table
      thead
        tr
          each header in headers
            th= header
      tbody
          each field in fields
            tr
              td= field.id
              td= field.name
              td= field.price

数据显示在 HTML 表格中。

td= field.id

td= 语法插入字段。

import { renderFile } from 'pug';
import { readFileSync, writeFileSync } from 'fs';
import pkg from 'csv';
const { parse } = pkg;

const csvData = readFileSync('cars.csv').toString();

parse(csvData, { columns: true }, (e, records) => {

    const headers = Object.keys(records[0]);
    const template = 'template.pug';

    const options = { 'fields': records, 'headers': headers };
    const res = renderFile(template, options);

    writeFileSync('index.html', res);
});

我们读取并解析 CSV 数据。我们将 CSV 数据分成标题和记录。

Pug.js 与 Express.js

在下一个示例中,我们将 Pug.js 与 Express.js 网络框架集成。

html
  body
    p Today is #{today}

模板放在views目录下。

import express from "express";

const app = express();
app.set('view engine', 'pug');

app.get("/today", (req, res) => {

    let today = new Date();
    res.render("index", {today: today});
});

app.use((req, res) => {
    res.statusCode = 404;
    res.end("404 - page not found");
});

app.listen(3000, () => {

    console.log("Application started on port 3000");
});

该示例是一个显示当前日期的小型 Web 应用程序。

app.set('view engine', 'pug');

我们告诉 Express 使用 Pug。

app.get("/today", (req, res) => {

    let today = new Date();
    res.render("index", {today: today});
});

我们为index 路由渲染/today 模板。

在本文中,我们使用 Pug.js 从 Pug 模板和数据生成 HTML 文档。

列出所有 JavaScript 教程。

赞(0) 打赏

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏