Nunjucks模板语法

本文详细介绍了使用Koa框架和Nunjucks模板引擎进行JavaScript开发,包括循环遍历数组、条件判断展示不同内容、模板继承以及include功能的应用。通过实例展示了如何在网页中动态渲染数据和实现页面结构复用。
摘要由CSDN通过智能技术生成

一、循环语句

1、js代码

const Koa = require("koa"); // 引入Koa构造函数
const views = require("koa-views");
const nunjucks = require("nunjucks");
// post请求
const parser = require("koa-parser");
const router = require("koa-router")();
const app = new Koa(); // 创建应用

// 设置路径,并且告知使用的模板引擎为:nunjucks
app.use(views(__dirname + "/views", {
    map: {
        html: "nunjucks"
    }
}))

let studentList = ["小明", "小红", "小亮"];

// index:网页名
// title:传递的参数
router.get("/", async (ctx) => {
    await ctx.render("index", {
        title: "hello nunjucks!",
        studentList
    });
})

app.use(router.routes());

// 设置监听端口
app.listen(3000, () => {
    console.log("server is running");
})

定义了一个studentList数组。

2、index.html页面代码

<body>
    <!-- title是后台传过来的值  -->
    <h1>{{title}}</h1>
    <ul>
        {% for student in studentList %}
        <li>{{student}}</li>
        {% endfor %}
    </ul>
</body>

使用for循环,取studentList数组的值。

3、效果 

二、条件判断

 1、js代码:

router.get("/", async (ctx) => {
    await ctx.render("index", {
        title: "hello nunjucks!",
        studentList,
        isLogin: true,
        username: "amdin"
    });
})

添加两个数据:isLogin,username。

 2、index.html页面代码:

<body>
    {% if isLogin %}
    <p>欢迎你:{{username}}</p>
    {% else %}
    <p>请登录...</p>
    {% endif %}
</body>

3、效果

(1)如果值为true

 

(2)如果值为false

 三、模板继承

让其它的页面,继承模板页面。(因为有些公共部份,可以单独提取出来。) 

项目结构:

  

1、模板页面代码(公共页面)layout.html:

<body>
    <div>
        <a href="/">首页</a>
        <a href="/images">图片</a>
        <a href="/videos">视频</a>
    </div>
    {% block content %} {% endblock %}
</body>

2、js文件:

const Koa = require("koa"); // 引入Koa构造函数
const views = require("koa-views");
const nunjucks = require("nunjucks");
// post请求
const parser = require("koa-parser");
const router = require("koa-router")();
const app = new Koa(); // 创建应用

// 设置路径,并且告知使用的模板引擎为:nunjucks
app.use(views(__dirname + "/views", {
    map: {
        html: "nunjucks"
    }
}))

// 首页路由
router.get("/", async (ctx) => {
    await ctx.render("index", {

    });
})

// 图片路由
router.get("/images", async (ctx) => {
    await ctx.render("images", {

    })
})

// 视频路由
router.get("/videos", async (ctx) => {
    await ctx.render("videos", {

    })
})

app.use(router.routes());

// 设置监听端口
app.listen(3000, () => {
    console.log("server is running");
})

3、首页 index.html: 

{% extends "./views/layout.html" %}

{% block content %}

<h1>首页</h1>

{% endblock %}

4、图片页 images.html:

{% extends "./views/layout.html" %}

{% block content %}

<h1>图片页面</h1>

{% endblock %}

5、视频页 videos.html:

{% extends "./views/layout.html" %}

{% block content %}

<h1>视频页面</h1>

{% endblock %}

6、效果:

 

 

  

 四、include 

某些页面可能会包含相同的组件,例如轮播图,可以通过include引入

1、新建footer.html

<div>
    power by XiaoSheng.
</div>

2、首页新增footer:

{% extends "./views/layout.html" %}

{% block content %}

<h1>首页</h1>

{% include "./views/footer.html" %}

{% endblock %}

3、效果:

只有首页有页脚,其它页面没有页脚。 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pro1822

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值