首页 > 其他分享 >Nunjucks模板入门

Nunjucks模板入门

时间:2022-11-17 21:45:31浏览次数:52  
标签:Nunjucks const 入门 views koa ctx nunjucks router 模板

概述

安装nunjucks


代码实现
server.js

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

app.use(views(__dirname + "/views",{//,前面是模板文件的路径,后面是使用的模板引擎
    map:{html:"nunjucks"}//模板文件为html格式,通过nunjucks渲染html文件
}))

app.use(async (ctx) => {
    await ctx.render("index",{title:"hello nunjuncks"});
    //render第一个值为模板文件,第二个是要传递的值
})

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

index.html

<!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>
    <h1>{{title}}</h1><!--传递的内容用{{}}包裹-->
</body>
</html>

把路由加上

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

router.get("/",async ctx => {
    await ctx.render("index",{title:"首页"});//index在views文件夹中
})
router.get("/video",async ctx => {
    await ctx.render("index",{title:"视频"});
})

app.use(views(__dirname + "/views",{
    map:{html:"nunjucks"}
}))

app.use(router.routes());//中间件路由在最后

app.listen(3000,() => {
    console.log("server is running");
});

处理表单数据

server.js

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

router.get("/",async ctx => {
    await ctx.render("index",{title:"首页"});//响应的内容
})
router.get("/video",async ctx => {
    await ctx.render("index",{title:"视频"});
})
router.get("/login",async ctx => {
    let username = ctx.query.username;//query可以获取到get请求参数
    let password = ctx.query.password;
    await ctx.render("home",{
        username:username,
        password:password
    });
})

app.use(views(__dirname + "/views",{
    map:{html:"nunjucks"}
}))

app.use(router.routes());

app.listen(3000,() => {
    console.log("server is running");
});

index.html

<!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>
    <form action="/login">
        <!--action的路径是提交表单到哪的位置,method是提交表单的请求方法,默认是get,一般用post-->
        <!--name:定义表单的数据字段-->
        <input type="text" name="username" placeholder="用户名">
        <input type="password" name="password" placeholder="密码">
        <input type="submit" value="登录">
    </form>
</body>
</html>

home.html 在views目录下

<!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>用户名:{{username}}</p>
    <p>密码:{{password}}</p>
</body>
</html>


post请求
server.js

const Koa = require("koa");//引入koa构造函数
const app = new Koa();//创建应用
const views = require("koa-views");//引入koa-views
const nunjucks = require("nunjucks");//引入nunjucks引擎
const router = require("koa-router")();
const parser = require("koa-parser");//解析post请求的模块
app.use(parser());
router.get("/",async ctx => {
    await ctx.render("index",{title:"首页"});//响应的内容
})
router.get("/video",async ctx => {
    await ctx.render("index",{title:"视频"});
})
router.get("/login",async ctx => {
    let username = ctx.query.username;//query可以获取到get请求参数
    let password = ctx.query.password;
    await ctx.render("home",{
        username:username,
        password:password
    });
})
router.post("/login",async ctx => {
    //post请求不能用query解析,要新下一个第三方模块parser
    let username = ctx.request.body.username;
    let password = ctx.request.body.password;
    await ctx.render("home",{
        username:username,
        password:password
    });
})

app.use(views(__dirname + "/views",{
    map:{html:"nunjucks"}
}))

app.use(router.routes());

app.listen(3000,() => {
    console.log("server is running");
});

index.html

<!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>
    <form action="/login" method="post">
        <!--action的路径是提交表单到哪的位置,method是提交表单的请求方法,默认是get,一般用post-->
        <!--name:定义表单的数据字段-->
        <input type="text" name="username" placeholder="用户名">
        <input type="password" name="password" placeholder="密码">
        <input type="submit" value="登录">
    </form>
</body>
</html>

home.html没变

标签:Nunjucks,const,入门,views,koa,ctx,nunjucks,router,模板
From: https://www.cnblogs.com/ben10044/p/16901087.html

相关文章

  • Verilog语法入门
    VerilogHDL是一种硬件描述语言(HDL:HardwareDescriptionLanguage),以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑......
  • python基础入门之黏包、UDP代码、多道技术、进程
    python基础入门之黏包、UDP代码、多道技术、进程目录python基础入门之黏包、UDP代码、多道技术、进程黏包现象黏包的解决方案UDP基本代码使用并发编程理论之操作系统发展......
  • LOJ数列分块入门九题(上)
    一转眼,已经有整整一年没有在博客园写博客了。Howtimeflys.最近突然想起其实我不太擅长分块算法,又想起去年暑假有位同学同我提起过LOJ的数列九题,说来惭愧,打了这么久题今......
  • HTTP协议、Maven、Servlet入门
    Http什么是HTTPHTTP(超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP之上文本:html,字符串...超文本:用超链接的方法,将各种不同空间的文字信息组织在一起的网......
  • Pod的理解(chrono《kubernetes入门实战课》笔记整理)
     【为什么要有pod】pod,直译为豌豆荚,形象地描述了它的功能,它内部包含很多豆子,这一颗颗豆子,就是每个组件、成员。既然pod也是为了运行容器,为什么不直接用docker运行呢?因为......
  • 模板方法
    模板方法例子如下,还是计算器为例。publicenumOperator{Add,Sub,Mul,Div}publicabstractclassCalTemplate{publicabstractOperatorOperat......
  • [模板]kmp求Next数组
    模板#include<iostream>#include<string>usingnamespacestd;voidgetNext(conststring&p,intnext[]){intlen=(int)p.size();next[0]=-1;......
  • NATS 入门详解
           参考翻译自NATS官方文档 https://nats-io.github.io/docs/https://toutiao.io/posts/p883vaw/preview  NATS入门详解......
  • 转载:不一样的入门:看C# Hello World的17种写法
    https://www.cnblogs.com/jara/p/3456672.html 摘要:本文针对不同阶段、不同程度的C#学习者,介绍了C#HelloWorld的17种不同写法,希望会对大家有所帮助。(C#HelloWorld......
  • 09_Kafka入门_数据日志分离
    关闭kafka但是会有延时,关闭的比较慢。之后再看一下就没了,需要等待一下。我们删除每台机器的logs文件夹:我们希望把数据和logs分开来放。这时候,就相当于kafka新装的一样......