如何同时使用 LoadHTMLGlob 和 LoadHTMLFiles

如何解决如何同时使用 LoadHTMLGlob 和 LoadHTMLFiles

我想要templates文件夹下不同子目录的分隔符逻辑模板,以下是我的模板文件夹

templates
├── authentication
│   ├── login.gohtml
│   └── logout.gohtml
├── index.gohtml
└── profile
    └── userinfo.gohtml

这是main.go


package main

import (
    "github.com/gin-gonic/gin"
)

func main() {
    router := gin.New()

    // router.Use(Threshold())   // not finished yet
    router.Use(Cors())

    // load templates
    // router.LoadHTMLGlob("templates/authentication/*.gohtml")
    router.LoadHTMLGlob("./templates/*/*.gohtml")
    router.LoadHTMLGlob("./templates/*.gohtml")
    // set static folder
    router.Static("/static","./public")

    // handler the favicon.ico
    router.StaticFile("/favicon.ico","./public/images/favicon.ico")


    InjectRoutes(router)



    // run the server at default port 8080
    router.Run(":8080")
}

InjectRoutes 来自 route.go

package main

import (
    "github.com/gin-gonic/gin"

    auth "github.com/yangwawa0323/mywebapp/v2/authentication"
    "github.com/yangwawa0323/mywebapp/v2/profile"
)

// Route struct
type Route struct {
    path         string
    handler      gin.HandlerFunc
    method       string
    templateFile interface{}
}

// R is alias of `Route`
type R = Route

// GenerateRoutes generate all the routes.
func GenerateRoutes() []Route {
    return []Route{
        R{"/",HomePage,"GET","./templates/index.gohtml"},R{"/login",auth.Login,nil},R{"/logout",auth.Logout,R{"/profile/:user/",profile.UserInfo,}
}

// InjectRoutes function inject routes to gin.Engine
func InjectRoutes(router *gin.Engine) {
    for _,r := range GenerateRoutes() {
        if r.templateFile != nil {
            router.LoadHTMLFiles(r.templateFile.(string))
        }
        switch r.method {
        case "POST":
            router.POST(r.path,r.handler)
        case "DELETE":
            router.DELETE(r.path,r.handler)
        case "PUT":
            router.PUT(r.path,r.handler)
        default:
            router.GET(r.path,r.handler)
        }
    }
}


这里是调试信息

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

[GIN-debug] Loaded HTML Templates (4): 
    - 
    - login.gohtml
    - logout.gohtml
    - userinfo.gohtml

[GIN-debug] Loaded HTML Templates (2): 
    - index.gohtml
    - 

2021/01/03 10:02:34 http: panic serving [::1]:50590: html/template: "userinfo.gohtml" is undefined
goroutine 34 [running]:
net/http.(*conn).serve.func1(0xc000302000)
    /usr/lib/go-1.13/src/net/http/

如你所见,已经加载了模板,但 LoadHTMLGlod 和 LoadHTMLFiles 只有一个在工作,最后一个优先于前一个。

我的问题是如何编写 glob 来实现我的要求或具有编写代码的其他技能,我不想创建一个新目录并将 index.gohtml 放入其中,即使它正在工作?谢谢。

解决方法

LoadHTMLGlob("path_patren") 它无法匹配您的所有文件路径。因为您的文件存储在不同的深度。并且不在同一深度。 请参阅 filepath.Glob 的文档。详情请见。

如您所知:调用 loadHTMLGlob() 并不能解决问题。您实际上是再次重置模板并清除您在第一次调用该函数时获得的设置。 解决方法很简单。 只需删除 loadHTMLGlob 并在 LoadHTMLFiles 中写入所有路径文件。 像这样:


files := []string{
    "home.html","acount.html","login.html","sign.html","folder1/stores.html","folder1/mystore.html","folder1/upload.html","folder2/templs/products.html","foleder2/partial/header.html","tmpl/partial/footer.html"}
    
templ := &Template{templates: template.Must(template.ParseFiles(files...))}

在杜松子酒中:使用 LoadHTMLFiles(files...)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res