作者:糖果

主流的WEB开发框架都有模板系统,或是支持第三方的模板插件。Lua Lapis也不例外,也有自己的模板系统,叫做etlua。

说到模板系统,另外要提一下静态资源的问题,模板的话难免要使用css、js、image这种静态文件,为了扫除一部分障碍先说一下Openresty是如何设定静态目标的。(相对Django相对要简单很多。)

location /static/ {                                                                                                                                                           
  alias static/;                                                                                                                                                              
}

在nginx.conf中加入这句话就可以了,在用lapis命令创建工程的时候就已经默认加入了。

对比看一下django对static的配置。

Django的静态文件设定,与Nginx的static设定方式存在差异,需要在对应应用的setting文件中进行配置,配置的内容如下:

SITE_ROOT=os.path.join(os.path.abspath(os.path.dirname(__file__)),'..')

STATIC_ROOT = os.path.join(SITE_ROOT,'static')

STATIC_URL='/static/'

STATICFILES_DIRS = (

    ("css", os.path.join(STATIC_ROOT,'css')),

    ("js", os.path.join(STATIC_ROOT,'js')),

   ("img", os.path.join(STATIC_ROOT,'img')),

)

在工程的Static目录下,只要添加一个新的静态目录,需追加定义到"STATICFILES_DIRS"中。

下面就是Lapis使用模板的例子。

1.创建工程。

mkdir tangguo
cd tangguo
lapis new 

创建一个新工程后,系统创建了三个文件。

app.moon mime.types nginx.conf

具体文件的内容功能不介绍了,之前一篇已经写过了。

2.创建模板目录与模板文件。

使用lapis模板,要在默认生成的目录构成的基础上,新创建一个目录:“views” 目录 。

mkdir views

之后所有的ETLUA模板文件,都会发到这个目录中。

cd views

我们创建一个最简单的模板文件。

touch index.etlua
echo "say hi" > index.etlua
index.etlua
say hi

3.创建后端LUA代码。

让Lapis Lua代码支持模板,只要在原有的app.lua中加入一个“开关”和一段处理代码。

a). 加入一行代码,打开etlua支持。

app:enable("etlua")

b).加入对应的路入处理代码,此处的处理是什么都不做,只渲染一表模板网页。

app:match("/index", function(self)                                                                                             
       --这就是LUA Web的风格,只需要一句,Lapis就会去views
       --目录下找到index.etlua,然后进行渲染显示。
        return { render = "index"}                                                                                             
end)

总结:

以上基本上是最简单的Lapis模板创建流程了。

回到tangguo目录下,运行lapis server。

打开浏览器,输入http://127.0.0.1:8000,就会在浏览器上显示文本“say hi”。

PS:在用VIM编辑.etlua文件的时候,默认是不显示语法高亮的,打开高亮需要在第一行加入:

PS:转载到其它平台请注明作者姓名及原文链接,请勿用于商业用途。