Lua Web开发

Lua Web快速开发指南(5) - 利用template库构建

2019-06-14  本文已影响0人  水果糖的小铺子

介绍template

模板引擎是为了使用户界面与业务数据(内容)分离而产生的, 其本身并不是一种深奥的技术.

template模板引擎首先会将合法的模板编译为lua函数, 然后将模板文件和数据通过模板引擎生成一份HTML代码.

cf的admin库整使使用了template来构建服务端渲染页面, 并利用单页面+iframe模式快速完成lua后台开发.

1. template基础语法

在真正使用之前, 我们先来学习一下template常见的一些基本语法:

2. 转义字符

3. API

开始使用

现在尝试使用模板引擎完成一个静态页面的数据导入工作渲染一个页面并展示给用户看.

首先, 导入template库local template = require "template". 并且将目前我们熟知的编程语言名称都罗列出来.

local languages = { 'C', 'C++', 'Java', 'golang', 'Rust', 'Ruby', 'Python', 'perl', 'Lua' }

然后, 我们在app目录下新建一个view目录, 并在view目录下新建一个名字为base.html的文件。 内容如下:

<html>
  <head>
    <title>{*title*}</title>
  </head>
  <body>
    <span><b>{*title*}:</b></span>
    <ul>
      {% if type(languages) == 'table' then %}
        {% for index, lang in ipairs(languages) do %}
          <li>{*index..'. '..lang*}</li>
        {% end %}
      {% end %}
    </ul>
    {# 没错, 注释不会展示给用户看到! #}
  </body>
</html>

最后完成一个/languages的路由注册, 将我们刚刚完成的模板渲染出来.

local template = require "template"
app:use('/languages', function(content)
  template.cache = {}
  local languages = { 'C', 'C++', 'Java', 'golang', 'Rust', 'Ruby', 'Python', 'perl', 'Lua' }
  return template.compile("view/base.html"){
      title = '语言列表',
    languages = languages
  }
end)

template.cache = {}的意思是, 每次都重新刷新缓存去读取文件, 这样方便我们进行调试.

最后打开http://localhost:8080/languages查看效果.

将一个模板分解到多个文件中

当一个项目的业务需求变得非常多的时候, 即是一个单纯的模板页面也会变得非常庞大并且不容维护与阅读.

现在我们来尝试将上面的模板进行模块化.

首先, 我们继续在app目录新建head.htmlcontent.html. 然后将这些代码拷贝进去:

{# 这是head.html的内容 #}
<title>{*title*}</title>
{# 这是content.html的内容 #}
<span><b>{*title*}:</b></span>
<ul>
  {% if type(languages) == 'table' then %}
    {% for index, lang in ipairs(languages) do %}
      <li>{*index..'. '..lang*}</li>
    {% end %}
  {% end %}
</ul>
{# 没错, 注释不会展示给用户看到! #}

然后将原来的base.html修改为:

<html>
  <head>
    {(view/head.html)}
  </head>
  <body>
    {(view/content.html)}
  </body>
</html>

最后, 由于服务器会自动刷新模板缓存, 我们只需要再次刷新浏览器就能查看效果.

完整代码示例

-- main.lua
local httpd = require "httpd"
local app = httpd:new("app")

local template = require "template"
app:use('/languages', function(content)
  local languages = { 'C', 'C++', 'Java', 'golang', 'Rust', 'Ruby', 'Python', 'perl', 'Lua' }
  template.cache = {}
  return template.compile("view/base.html"){
      title = '语言列表',
    languages = languages
  }
end)

app:listen("0.0.0.0", 8080)

app:run()

更多

更多template用法可以参考cf的admin库.

继续学习

下一章我们继续学习如何使用缓存与数据库.

上一篇下一篇

猜你喜欢

热点阅读