在项目中并没有使用angular或是vue这类的单页应用,还是使用的是模版引擎,虽然Gin中也支持,但还是比较弱的,默认只支持了html.template。这次碰到的问题是多级视图目录的问题,虽然多级目录会有性能的问题,但还是比较常见的。
一、Gin默认目录视图
Gin虽然也是支持模版引擎的(html.template),但是比较弱,只能支持到一级目录或是二级目录,而且一级目录与二级目录还不能同时使用。
1、一级目录的支持操作
LoadHTMLGlob(templates/*),此操作相当于加载templates目录下所有的文件
2、二级目录的支持操作
LoadHTMLGlob(templates/**/*)
虽然是已以支持了二级目录,但还是比较麻烦的,因为除了要进行模版加载设置,还要在视图页面进行定义。
二、Gin多级目录视图实现
在Gin的官方文档中我们可以找到一个叫Multitemplate的例子,指向的是自家插件的multitemplate,但今天介绍的不是此插件而是在此插件进行的扩展ginmultitemplate。
首先下载导入ginmultitemplate。
使用起来很简单,可以根据例子直接设置视图的根目录及模板引擎的后辍,便可直接使用。
实现也很简单,只有一个templates.go文件,在使用过程中其它还有一些别的问题:
1、windows下报找不到目录文件问题
由于windows与linux路径不一致(windows:/a/b/c/abc.html;linux:a\b\c\abc.html)导致在windows下会报找不到目录文件。
在go中,包filepath提供了ToSlash方法,可以把windows下的路径转换为/这种形式,可以解决这种问题。
2、模板根目录配置问题
此处理的问题,我还没有好的方法进行处理,后续处理好进行补充。
此处的代码有一定的问题,通过模板根目录的长度去除路径中的模块信息,但是如果模板目录的定义成:/template,/template/,./template,/template/,这种情况时就需要根据不同的情况进行不同的处理。