node.js阶段 - 处理前端数据的“利器”模板引擎

本文介绍了web应用中用于动态生成HTML的模板引擎概念,探讨了包括EJS、Pug及Nunjucks在内的常见模板引擎,并详细解析了Pug和Nunjucks的语法特性,如变量插入、条件循环、函数定义及模板继承。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模板引擎

web应用中,动态生成html的工具,负责数据与模板的结合
常见的模板引擎有 ejs,jade(pug),nunjucks等

pug

编译 工具下载 npm install pug-cli -g
pug 生成的文件名 -w ( 跟随修改实时变化 )
pug 生成的文件名 -P ( 将生成的文件整理为可阅读格式 )
pug 生成的文件名 -w ( 跟随修改实时变化 )

注意事项
  • 层级关系由缩进来表示
  • 统一使用空格 或 统一使用 tab
  • 没有闭合标签( 不需要 )
pug 页面元素
    h1 标题
    div div标签
    div(class="mydiv") 类名为mydiv的 div 
    .ball 第二个div (直接写类名,也是div)
    #box 不仅可以写class类名(页面上显示为div)
    p p标签
css 样式
  • 内联样式
	style.
		.mydiv{
			width:200px;
			background:red;
			color:white;
			text-align:center;
			line-height:40px;
		}
  • 行间样式
	.mydiv2(style={width:'100px'})
  • 外联样式
    link(rel="stylesheet" href="index.css" type="text/css")
关于注释
  • 单行注释
	//- pug的注释 不会被加载
	// html注释,只是读取
  • 多行注释
    //-
		第一行
		第二行	
	// 
		多行注释1
		多行注释2	
标签和JS联用
    // 接收服务器端返回的数据
	// p #{data}
    p #{data}

	// 使用自身的数据
	- let str = "hello"
	p #{str}
使用判断、循环、函数、混入模式
    ul
		each item in users
			li 姓名是:#{item.name};年龄是:#{item.age};身高是:#{item.height}

	- for(let i = 0;i < 4;i++)
		span 我是循环出来的数据#{i}

	- let num = 1;
		case num
			when 1
				p num 为1
			when 2
				p num 为2
			when 3
				p num 为3
			default
				p num 为未知的数值
类似函数
	mixin mydiv
		div 我是常见的div
	+ mydiv
	+ mydiv
	+ mydiv

	mixin pet(name,sex)
		p 这是一只#{name},他的性别是#{sex}
	+pet("萨摩耶","公")
	+pet("哈士奇","公")
script便签
	// 引入时 直接写文件名 js部分会在引入依赖时,自动查找
	script(src="a.js" type="text/javascript")
	
    script(type="text/javascript").
		console.log(24)
特殊格式,转义符
	div 
		| 文本也可以这样写
公共模板
    include common.pug
    //-  整个pug页面引入(common.pug)
    div(class="mydiv") 类名为mydiv的 div 
		include common.pug

nunjucks

{{ }} 方式取值访问
限制不在那么严格 需要使用缩进格式

if判断
    {% if age > 20 %}
    <p>age的值大于20</p>
    {% elseif age < 20 %}
    <div>age的值小于20</div>
    {% else %}
    <p>age的值等于20</p>
    <!-- 记得写结束符号 且 endif 没有空格间隔 -->
    {% endif %}
循环结构
    <ul>
        {% for item in arr %}
        <li>姓名是 {{item.name}},身高是{{item.height}}</li>
        {% endfor %}
    </ul>
过滤器
    {{str | replace("world","世界") | capitalize}}
宏标签

类似函数

    {% macro pet(name="猫咪",sex="未知") %}
    <p>它是一只{{name}},性别是{{sex}}</p>
    {% endmacro %}

    {% macro person(name="光达",height="……") %}
    <p>人类个体{{name}},身高是{{height}}</p>
    {% endmacro %}

    {{pet("狗子","公的")}}
    {{pet("袍子","母的")}}
    {{pet("水獭")}}
引入模板
    {% include 'footer.html' %}
    
	{# html注释 <!-- --> 会出问题 调用整体页面 #}
    {# 引入index文件 将index文件中的页面调用过来 #}
    {% include 'index.html' %}

    {# 导入index文件 只是拿到index的数据 #}
    {% import 'index.html' as obj %}

    {{obj.pet("郭","公子")}}
    {{obj.person("秦","178")}}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值