html - go - 打开文件没有那个文件或目录

标签 html file go render template-engine

我写了一个包装函数来渲染这样的模板

func RenderTemplate(w http.ResponseWriter, data interface{}, tmpl... string) {
    cwd, _ := os.Getwd()
    for _ , file := range tmpl{
        file = filepath.Join(cwd,"./view/"+file+".html")
    }
    t, err := template.ParseFiles(tmpl...)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    err = t.Execute(w, data)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
    }
}

我在 main 中设置静态文件夹和路由处理程序

http.Handle("/public/",http.StripPrefix("/public/",http.FileServer(http.Dir("public"))))

http.HandleFunc("/",route.IndexHandler)

这是我的路由处理器

func IndexHandler(w http.ResponseWriter, r *http.Request) {
    files:=[]string{"base","index"}
    util.RenderTemplate(w, nil, files...)
}

我打算使用模板嵌套来帮助index.html扩展base.html

这是base.html

{{define "base"}}
<!DOCTYPE html>
<html>
<head>
    <meta charget="utf-8">
    <title>{{template "title".}}</title>
    <script type="text/javascript" src="https://code.jquery.com/jquery-2.2.0.min.js"></script>
    <script type="text/javascript" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
    <script type="text/javascript" src="/js/isotope.pkgd.min.js"></script>
    <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
    <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
    <link rel="stylesheet" type="text/css" href="/css/style.css">
</head>
<body>
    {{template "index".}}
</body>
</html>
{{end}}

这是index.html

<!DOCTYPE html>
<html>
{{define "title"}}Homepage{{end}}
<body>
    {{define "index"}}
    <div class="wrapper">
        <div class="page-content">
            <div class="container">
                <div class="left">
                    <img src="../public/images/img_landing_page_mac.png">
                </div>
                <div class="right">
                    <h2 style="font-size: 33px; letter-spacing: 5px">Organize <br>Modern Knowledge<br> for Mankind</h2>
                    <p style="font-size: 20px;margin-top: 35px;letter-spacing: 4px">Consume, Colect and Revisit <br>Knowledge at Your Fingertips</p>
                    <a href="#" style="margin-top: 80px;display: inline-block;margin-left: -17px"><img src="../public/images/btn_get_chrome.png"></a>
                </div>
            </div>
        </div>
    </div>
    {{end}}
</body>
</html>

但是当我运行服务器,并在浏览器上请求路径时,它显示错误

open base: 没有那个文件或目录

我的渲染函数有问题吗?

最佳答案

t, err := template.ParseFiles(tmpl...)

我猜 `tmpl' 似乎不是一个文件路径 :(
我猜你想喜欢这个。

files := make([]string, len(tmpl))
for i, file := range tmpl{
    files[i] = appendfilepath.Join(cwd,"./view/"+file+".html")
}
t, err := template.ParseFiles(files...)

关于html - go - 打开文件没有那个文件或目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35905338/

相关文章:

html - 如何减少打破文本的标签/跨度/p 之间的空间?

Java代码从文件夹中获取文件名列表

javascript - NodeJS 检测修改过的文件

c - 学习C,[1]为什么要在main中获得无限循环? [2]为什么在不触摸文件检查代码的情况下出现段错误

templates - 如何在 html/template 中的操作后控制空格?

出现错误时 PostgreSQL 不返回完整的响应

html - 如何仅使用 float 将 H2 移动到 H1 下面

javascript - 需要在页面加载时触发对 clickCounter() 的调用

string - int 到 string 的转换在 Go 中是如何工作的?

html - CSS left, position 和 floating ...在多个浏览器中的不同结果