动态web网页开发是Web开发中一个常见的场景,比如像京东商品详情页,其页面逻辑是非常复杂的,需要使用模板技术来实现。而Lua中也有许多模板引擎,如目前我在使用的lua-resty-template,可以渲染很复杂的页面,借助LuaJIT其性能也是可以接受的。

如果学习过JavaEE中的servlet和JSP的话,应该知道JSP模板最终会被翻译成Servlet来执行;而lua-resty-template模板引擎可以认为是JSP,其最终会被翻译成Lua代码,然后通过ngx.print输出。

而lua-resty-template和大多数模板引擎是类似的,大体内容有:

模板位置:从哪里查找模板;

变量输出/转义:变量值输出;

代码片段:执行代码片段,完成如if/else、for等复杂逻辑,调用对象函数/方法;

注释:解释代码片段含义;

include:包含另一个模板片段;

其他:lua-resty-template还提供了不需要解析片段、简单布局、可复用的代码块、宏指令等支持。

模板的一些常用特殊指令,类似与jsp中的指令一样

{(include_file)}:包含另一个模板文件;

{* var *} :变量输出;

{{ var }}:变量转义输出

{% code %}:代码片段

{# comment #}:代码注释

{-raw-}:中间内容不会解析,作为纯文本输出;

下载lua 模板类库

wget https://raw.githubusercontent.com/bungle/lua-resty-template/master/lib/resty/template.lua

wget https://raw.githubusercontent.com/bungle/lua-resty-template/master/lib/resty/template/html.lua

首先来看下template.lua的模板路径选择

lua查找模板页面路径的选择:以下是lua  template.lua的源码

两个指定的变量:

template_location:指向ngx的location,使用内部调用internal,alias用于指定文件夹的别名。

注意:不能使用location =/templates 中的只 等于 ‘=’ 符号来修饰,因为lua脚本的源码 capture(location/file),比如/templates/t1.html,如果使用=匹配,就匹配不到了。

template_root:指向模板页面的根路径。

两者关系:首先从template_location中配置的路径获取模板,如果没有在从template_root配置的路径中获取,如果还是没有的话,最后从nginx的document_root中获取路径中的模板页面

API

使用模板引擎的目的就是输出响应内容:主要有两种方式输出:

第一种:通过ngx.print/ngx.say输出渲染后的内容。

第二种:得到模板渲染之后的内容按照想要的规则输出。

第一种配置:

模板的内容:

得到的结果:

第二种方式:

模板配置的内容:

结果如下:

模板最终被转换为lua代码进行执行,所以模板中可以执行任意的lua代码。

openresty模板html页面,openresty 中使用lua 的页面模板类库template来渲染页面相关推荐

  1. android动态设置错误页面,Android中替换WebView加载网页失败时的页面

    我们用webView去请求一个网页链接的时候,如果请求网页失败或无网络的情况下,它会返回给我们这样一个页面,如下图所示: 上面这个页面就是系统自带的页面,你觉得是不是很丑?反正小编本人觉得非常丑,很难 ...

  2. php渲染nodejs api,nodejs通过响应回写渲染页面步骤详解

    这次给大家带来nodejs通过响应回写渲染页面步骤详解,nodejs通过响应回写渲染页面的注意事项有哪些,下面就是实战案例,一起来看一下. 我们一般通过node框架提供的api操作页面渲染,如何利用原 ...

  3. 【四二学堂】jquery方式ajax获取数据并渲染页面

    var newsData = ''; var mydata = {"pageNum":obj.curr,"pageSize":"5"}; / ...

  4. CentOS6.4 安装OpenResty和Redis 并在Nginx中利用lua简单读取Redis数据

    1.下载OpenResty和Redis OpenResty下载地址:wget http://openresty.org/download/ngx_openresty-1.4.3.6.tar.gz Re ...

  5. 在CentOS 6.9 x86_64上玩转OpenResty 1.13.6.1中的resty-cli模块

    resty-cli是OpenResty中命令行工具的集合,其中resty工具是最有用的. 安装好OpenResty之后,resty-cli就会默认安装,以我的安装为例,参见博文 http://blog ...

  6. opm openresty的包管理器-中文文档

    2022年1月11日13:57:45 官方:https://opm.openresty.org/ 官方文档:https://opm.openresty.org/docs#table-of-conten ...

  7. express应用中ajax结合模板引擎ejs.js渲染页面

    一.express应用中ajax结合模板引擎ejs.js渲染页面 在views新建一个渲染模板命名 Template.ejs Template.ejs 示例: <% if(coursesList ...

  8. nginx lua连接mysql_OpenResty的安装和在nginx中使用lua直接访问mysql达到数据接口的统一...

    OpenResty 它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项. 如果需要nginx的第三方库的时候,可以考虑OpenResty,可以少掉很多安装的麻烦,Open ...

  9. 在windows程序中嵌入Lua脚本引擎--使用VS IDE编译Luajit脚本引擎

    前些天听到一个需求:某业务方需要我们帮忙清理用户电脑上的一些废弃文件.同事完成这个逻辑的方案便是在我们程序中加入了一个很"独立"的业务逻辑:检索和删除某个程序产生的废弃文件.试想, ...

最新文章

  1. 面试官:高并发下,如何保证分布式唯一全局 ID 生成?
  2. 一篇让你搞懂 Nginx
  3. vim插件的安装方式 -- vim注释插件和doxygen函数注释生成插件-ctrlp插件-tabular等号对齐 插件...
  4. es5如何实现promise_彻底理解Promise对象——用es5语法实现一个自己的Promise(上篇)...
  5. JavaScript内部实现
  6. pandas 常用函数整理
  7. Kibana6.x.x源码结构分析笔记
  8. PySpark任务在YARN集群上运行python 算法
  9. 2022年6月25日PMP考试通关宝典-4
  10. 分享128个商务模板PPT模板,总有一款适合你
  11. 普中28335开发攻略_凌乱的DSP笔记(1)-F28335基础知识
  12. png格式的图片怎么变成jpg格式?png图片怎么转格式?
  13. 泰克Tektronix示波器上位机软件NS-Scope介绍
  14. php观察者模式,组合ArmyVisitor抽象类,用accept()方法将访问者对象传递给当前对象的所有的子元素,当前组件是一个组合体
  15. Ubuntu上安装博通无线网卡驱动
  16. 分享几个程序员接活赚外快的平台
  17. micropython STM32移植笔记(一)
  18. 使用visDrone数据集训练yolov5检测器
  19. Ubuntu 20.04 开启麦克风降噪功能
  20. bzoj1296 [SCOI2009]粉刷匠

热门文章

  1. pythonscatter简书_python plotly 使用教程
  2. 记录webpack使用问题,使用报错“UnhandledPromiseRejectionWarning,file-loader图片过大,无法加载图片,打包html文件报错TypeError
  3. java try finally connectoin close_Java I/O流详解
  4. input python_python input 详解
  5. pycharm安装scrapy失败_Scrapy ——环境搭配与一个简单的例子
  6. Linux 之八 完整嵌入式 Linux 环境、(交叉)编译工具链、CPU 体系架构、嵌入式系统构建工具
  7. DEBUG日记:同样的代码在不同的环境却得出不同的结果。
  8. java城市公交查询系统案例_013JAVA.JSP城市公交查询系统.zip
  9. python脚本迁移数据库_Python迁移MySQL数据到MongoDB脚本
  10. 编码方式 / Base 64