• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

openresty 中使用lua 的页面模板类库template来渲染页面

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

动态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代码。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
使用Python实现Excel转Lua、Json发布时间:2022-07-22
下一篇:
idealua插件设置LuaSDK发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap