art-template渲染大坑,从后台接受到的数据正确,但渲染出来的都是空白

问题描述

后台使用的是art-template模板引擎和express

// 部分代码如下
router.get('/advert/add', (req, res, next) => {res.render('advert_add.html');
});

前端使用的art-template
重点看下面画着的部分

// 代码如下
{{ extend './layout.html' }}{{ block 'style' }}
{{ /block }}{{ block 'body' }}
<div class="container-fluid"><div class="body advert"><!-- 面包屑 --><ol class="breadcrumb"><li><a href="javascript:;">广告管理</a></li><li class="active">广告列表</li></ol><div class="page-title"><a href="/advert/add" class="btn btn-success btn-sm pull-right">添加广告</a></div><div class="panel panel-default"><div class="panel-body"><form action="" class="form-inline"><select name="" class="form-control input-sm"><option value="">按年龄</option></select><select name="" class="form-control input-sm"><option value="">按性别</option></select><select name="" class="form-control input-sm"><option value="">按地区</option></select><select name="" class="form-control input-sm"><option value="">按日期</option></select><button class="btn btn-success btn-sm">筛选</button></form></div><table class="table table-bordered"><thead><tr><td>序号</td><th>标题</th><th>图片</th><th>链接</th><th>开始时间</th><th>结束时间</th><th>点击次数</th><th>操作</th></tr></thead><tbody id="tbody"></tbody></table></div></div><!-- 分页 --><ul class="pagination pull-right" id="pagination"><!-- <li><a href="/advert">上一页</a></li><li><a href="/advert">1</a></li><li><a href="/advert">2</a></li><li><a href="/advert">3</a></li><li><a href="/advert">4</a></li><li><a href="/advert">下一页</a></li> --></ul>
</div>
</div><!-- ————————————————————————————————重点看这里开始—————————————————————————————————— -->
<script type="text/template" id="tpl">{{each adverts}}<tr><td>{{$index + 1}}</td><td>{{$value.title}}</td><td><img src="../public/images/{{$value.images}}" style="width:100px;" alt=""></td><td>{{$value.link}}</td><td>{{$value.start_time}}</td><td>{{$value.end_time}}</td><td>1</td><td><a href="javascript:;" class="btn btn-info btn-xs">编辑</a><a href="javascript:;" class="btn btn-danger btn-xs">删除</a></td></tr>{{/each}}
</script>
<!-- ————————————————————————————————重点看这里结束—————————————————————————————————— -->{{ /block }}{{ block 'script' }}
<script src="../node_modules/art-template/lib/template-web.js"></script>
<script src="../node_modules/twbs-pagination/jquery.twbsPagination.js"></script><script>var pageSize = 5;$.ajax({url: '/advert/count',type: 'get',success: function (data) {if (data.err_code === 0) {$('#pagination').twbsPagination({totalPages: Math.ceil(data.result / pageSize), //告诉这个插件一共有多少页visiblePages: 5, //试图可见页码first: '首页',prev: '上一页',next: '下一页',last: '最后一页',onPageClick: function (event, page) {//当点击某个页码的时候要执行的回调处理函数,所谓的异步无刷新分页//本质上就是当点击某一页的时候,发起一个ajax异步请求,获取当前页码对应的数据,然后在客户端做渲染loadData(page);}});}}});// ————————————————————————————————重点看这里开始——————————————————————————————————function loadData(page) {$.ajax({url: '/advert/list',type: 'get',data: {page: page,pageSize: pageSize},dataType: 'json',async: false,success: async function (data) {if (data.err_code === 0) {console.log(data);console.log(template);var htmlStr = await template("tpl",{adverts:data.result  });console.log(htmlStr);$('#tbody').html(htmlStr);}}})}
// ————————————————————————————————重点看这里结束——————————————————————————————————
</script>
{{ /block }}

如果按照这种前端和后端都使用一个模板引擎的方法,那么后端返回页面的时候会使用art-template渲染,遇到下面的代码,会用模板引擎解析一遍,因为没有提供adverts数据,所以解析为空,当前端发出异步请求得到数据之后用art-template渲染数据,发现下面代码啥都没有,自然就无法渲染,所以是结果是空的,既然咱们现在明白了这个道理,前端和后端不要使用一个模板引擎就可以了。

<script type="text/template" id="tpl">{{each adverts}}<tr><td>{{$index + 1}}</td><td>{{$value.title}}</td><td><img src="../public/images/{{$value.images}}" style="width:100px;" alt=""></td><td>{{$value.link}}</td><td>{{$value.start_time}}</td><td>{{$value.end_time}}</td><td>1</td><td><a href="javascript:;" class="btn btn-info btn-xs">编辑</a><a href="javascript:;" class="btn btn-danger btn-xs">删除</a></td></tr>{{/each}}
</script>

在这里插入图片描述
咱们下面前端使用atr-template-native后端使用nunjucks来看一下结果

{% extends "layout.ejs" %}{% block style %}
{% endblock %}{% block body %}
<div class="container-fluid"><div class="body advert"><!-- 面包屑 --><ol class="breadcrumb"><li><a href="javascript:;">广告管理</a></li><li class="active">广告列表</li></ol><div class="page-title"><a href="/advert/add" class="btn btn-success btn-sm pull-right">添加广告</a></div><div class="panel panel-default"><div class="panel-body"><form action="" class="form-inline"><select name="" class="form-control input-sm"><option value="">按年龄</option></select><select name="" class="form-control input-sm"><option value="">按性别</option></select><select name="" class="form-control input-sm"><option value="">按地区</option></select><select name="" class="form-control input-sm"><option value="">按日期</option></select><button class="btn btn-success btn-sm">筛选</button></form></div><table class="table table-bordered"><thead><tr><td>序号</td><th>标题</th><th>图片</th><th>链接</th><th>开始时间</th><th>结束时间</th><th>点击次数</th><th>操作</th></tr></thead><tbody id="tbody"></tbody></table></div></div><!-- 分页 --><ul class="pagination pull-right" id="pagination"><!-- <li><a href="/advert">上一页</a></li><li><a href="/advert">1</a></li><li><a href="/advert">2</a></li><li><a href="/advert">3</a></li><li><a href="/advert">4</a></li><li><a href="/advert">下一页</a></li> --></ul>
</div>
</div>
<script type="text/template" id="tpl">
<% adverts.forEach(function(items, index){ %><tr><td><%= index + 1 %></td><td><%= items.title %></td><td><img src="../public/images/<%=items.images%>" style="width:100px;" alt=""></td><td><%= items.link %></td><td><%= items.start_time %></td><td><%= items.endtime %></td><td>1</td><td><a href="javascript:;" class="btn btn-info btn-xs">编辑</a><a href="javascript:;" class="btn btn-danger btn-xs">删除</a></td></tr>
<% }) %>
</script>
{% endblock %}{% block script %}
<script src="../node_modules/art-template/dist/template-native.js"></script>
<script src="../node_modules/twbs-pagination/jquery.twbsPagination.js"></script>
<script>var pageSize = 5;$.ajax({url: '/advert/count',type: 'get',success: function (data) {if (data.err_code === 0) {$('#pagination').twbsPagination({totalPages: Math.ceil(data.result / pageSize), //告诉这个插件一共有多少页visiblePages: 5, //试图可见页码first: '首页',prev: '上一页',next: '下一页',last: '最后一页',onPageClick: function (event, page) {//当点击某个页码的时候要执行的回调处理函数,所谓的异步无刷新分页//本质上就是当点击某一页的时候,发起一个ajax异步请求,获取当前页码对应的数据,然后在客户端做渲染loadData(page);}});}}});function loadData(page) {$.ajax({url: '/advert/list',type: 'get',data: {page: page,pageSize: pageSize},dataType: 'json',success: function (data) {if (data.err_code === 0) {//就是上面那个tplvar htmlStr = template('tpl', {adverts: data.result  //在advert.js里就是adverts})$('#tbody').html(htmlStr);}}})}
</script>
{% endblock %}

哦耶,这样子就在前端有数据啦
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/25181.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Unity3D热更框架] LuaMVC简介

1.什么是LuaMVC 从工作以来一直从事工业三维仿真软件/AR软件的开发&#xff0c;每个项目开发周期短&#xff0c;项目从Demo到完(huang)结(le)时间较为紧凑&#xff0c;因此需要一个便捷的开发框架作为支撑&#xff0c;以适应不同的项目需求&#xff0c;而且需要尽可能覆盖多个终…

一张图了解OpenGL的渲染架构

初学者在初学OpenGL时&#xff0c;很多时候会对OpenGL的渲染架构感到困惑&#xff0c;不清楚它是怎么一个渲染流程&#xff0c;常将Arributes直接传递到片元着色器&#xff0c;或者为了将属性直接传递到片元着色器&#xff0c;而通过uniform传递到片元着色器等&#xff0c;这样…

GacUI:跨平台和渲染器

GacUI&#xff1a;跨平台和渲染器 https://github.com/vczh/GacUIBlog UI库跨平台的方法无非就是每个平台写一次。而如何把更多的共同点抽取出来&#xff0c;尽量的减少每个平台写一次的部分&#xff0c;是每一个跨平台的UI库的重点之一。GacUI的设计比较直接&#xff0c;所有…

Unity3D 《拥挤城市》3D房子建筑透视效果实

3D游戏&#xff0c;经常会看到透视效果&#xff0c;例如《王者荣耀》草丛透视&#xff0c;《拥挤城市》建筑透视。 实现原理&#xff1a;把3D模型MeshRenderer中Materials替换成透明材质球。 举例&#xff1a;《拥挤城市》3D房子建筑透视效果实现&#xff0c;效果如下图&…

Unity2020高清渲染管线

一、高清渲染管线加载与环境配置 这里使用2019.3.0f6版本 1、加载高清渲染管线&#xff08;High Definition RP&#xff09; 2、创建高清管线脚本文件 3、配置高清渲染管线环境&#xff08;把色彩空间改为线性空间&#xff09; 4、把高清渲染管线脚本添加到图形&#xff08;G…

Unity Xlua热更新框架(一):概述与效果演示

1. 资源目录划分 资源&#xff1a;热更新资源和热更新步骤&#xff08;Bundle&#xff09;&#xff0c;&#xff0c;&#xff0c;&#xff0c;资源需要打成Bundle包&#xff0c;通过不重新安装安装包的情况&#xff0c;去更新和替换资源代码&#xff1a;Lua与C&#xff03;的交…

Unity3D教程:实现房产项目中的材质动态切换

在许多典型的房产展示项目当中&#xff0c;经常需要动态地实现例如墙纸、地板等材质的更换以获得不同的展示效果&#xff0c;下面将通过一个简单的教程介绍实现这一功能的关键技术。 首先需要场景中创建一个简易的样品房&#xff0c;样品房里面有一个地面和两面相互垂直的墙壁…

【GAMES-104现代游戏引擎】4、引擎渲染基础(渲染基础数据、全局光照、PBR、阴影)

Lecture04~05 1、光栅化流程2、一丢丢显卡知识3、网格绘制组件&#xff08;Mesh Render Component&#xff09;4、材质5、资源池&#xff08;Resource Pool&#xff09;6、Cluster-Based Mesh Pipeline7、渲染 游戏渲染的挑战 一个场景包含成千上万的GO需要的材质、shader、效果…

重回游戏公平,向游戏打金工作室宣战!

什么是打金工作室&#xff1f; 近几年中国游戏市场持续发展&#xff0c;国产自研精品游戏层出不穷&#xff0c;游戏产业精品化、高质量健康发展趋势稳定。根据中国音数协游戏工委&#xff08;GPC&#xff09;与中国游戏产业研究院发布的《2022年中国游戏产业报告》显示&#xf…

GPT-4 API平替?性能媲美同时成本降低98%,斯坦福提出FrugalGPT,研究却惹争议

来自&#xff1a;机器之心 进NLP群—>加入NLP交流群 Game Changer 还是标题党&#xff1f; 随着大型语言模型&#xff08;LLM&#xff09;的发展&#xff0c;人工智能正处于变革的爆发期。众所周知&#xff0c;LLM 可用于商业、科学和金融等应用&#xff0c;因而越来越多的公…

FrugalGPT

随着大型语言模型&#xff08;LLM&#xff09;的发展&#xff0c;人工智能正处于变革的爆发期。众所周知&#xff0c;LLM 可用于商业、科学和金融等应用&#xff0c;因而越来越多的公司&#xff08;OpenAI、AI21、CoHere 等&#xff09;都在提供 LLM 作为基础服务。虽然像 GPT-…

使用chatGPT生成一个带圆角的Container

我在项目中是想实现如图带圆角的Container&#xff0c;使用chatGPT生成步骤如下。 首先&#xff0c;生成渐变色的Container 生成的Container代码如下&#xff1a; Container(margin: EdgeInsets.fromLTRB(30, 0, 30, 0),height: 200.0,width: double.infinity,decoration: BoxD…

ChatGPT-4 如何改变 AI 市场及其对未来的影响?GPT版本及其差异

GPT-1 对比 GPT-2 对比 GPT-3。Chat GPT (Generative Pre-trained Transformer) 是一种高级自然语言处理模型,它使用机器学习算法来生成看起来像人类所写的文本。GPT模型的发展彻底改变了人工智能领域,特别是在语言处理领域。 多年来,已经发布了多个版本的 GPT 模型,每个版…

AI新风向标PaLm2?能否取代ChatGPT成为AI领域的老大

AI新风向标PaLm2&#xff1f; ​ 前几天Google发布了&#xff0c;PaLM2作为Google的下一代大型语言模型&#xff0c;它会取代ChatGPT成为更智能的AI工具吗? 关于PaLM2 ​ PaLM 2是Google的下一代大型语言模型&#xff0c;它建立在谷歌在机器学习和负责任的人工智能方面的突破…

部落冲突外挂

有人玩部落冲突吗&#xff0c;我这里有挂&#xff0c;加我qq3083413274&#xff0c;我给你。

最新最全文献下载网站:文献部落——一站式查找、下载文献!

来喽来喽&#xff01; 小编带着新鲜出炉的“文献部落”来喽&#xff01;同样是文献下载&#xff0c;凭啥只有他值得我推荐&#xff1f;还不是因为好用&#xff1f;&#xff01;你以为只有SCI吗&#xff1f;太天真了&#xff01;你往下看↓↓↓ 文献部落&#xff1a;http://459…

外文文献检索网站

1. Google scholar 网址&#xff1a; https://scholar.google.com.hk/?hlzh-CN 如今搜索论文的首选&#xff0c;可以在这里查看论文统计和引用参考文献&#xff0c;还能通过关注作者或者论文获得新论文更新提醒&#xff0c;以及利用自动化推荐来提供一个基本库 2. DBLP 网址…

COC部落冲突自动找鱼 python脚本

众所周知&#xff0c;最近COC被腾讯收购了&#xff0c;又整了一波活&#xff0c;花里胡哨的兵种都不认识了&#xff0c;这件事我不做评价吧。 图个新鲜感&#xff0c;高中几个哥们突然又玩起了部落冲突&#xff0c;打&#x1f41f;一时爽&#xff0c;一直打&#x1f41f;一直爽…

代码故事:汉德的救赎

我叫汉德(Handle),是一段程序代码,出生在日食之城埃地特(Editor)。 我诞生于伟大而荣耀的瑟维斯家族(Service),我们家族的格言是:“瑟维斯永不倒下。(Services never crash down.)”。 信仰 我们家族的信仰,哦,不对,应该是所有代码家族的信仰都是普瑞格兰姆神…

coc部落冲突脚本辅助工具,小曦coc,PHP随机数生成代码

什么是脚本&#xff1f; &#xff08;1&#xff09;脚本就是剧本 &#xff08;2&#xff09;脚本是普通的文本文件&#xff0c;是批处理文件 &#xff08;3&#xff09;脚本导演了一个序列事件的发生 &#xff08;4&#xff09;脚本让一个例行任务效率大幅提升 游戏脚本基本只…