GoLang 中的 HTML 部分

2024-05-24

我刚刚开始使用 Go,我想用它创建一个网络应用程序。我现在尝试的是以handlebarsjs 式的方式使用模板。我想将页眉和页脚从主页中取出,以便可以将它们注入到每个网页上。

我当前的设置应该是解析主页、页眉和页脚 HTML 文件并缓存它们。然后,我执行 home.html 模板,其中包含页面标题、header.html 文件和 footer.html 文件的字段。

每当我搜索类似的页面时,我只会看到 javascript 页面,因此如果这是转发,请让我知道在哪里查找。

edit:我已经更新了我的代码,以从 @Minty 和 @putu 的答案中获取提示。我正在尝试读取 html 文件并将它们存储在数据映射中,同时还添加模板define到我的模板。我正在处理一些新的错误,因此该网站当前无法呈现。但是,如果您可以提供任何新的提示,那将会有很大帮助。

服务器.go

package main

import (
    "html/template"
    "io/ioutil"
    "net/http"
    "regexp"
)

var tPath = "./temps/"
var dPath = "./data/"

var templates = template.Must(template.ParseFiles(tPath+"home.html", dPath+"header.html", dPath+"footer.html"))
var validPath = regexp.MustCompile("^/")

func rootHandler(wr http.ResponseWriter, req *http.Request) {
    title := "home"
    headerFile, headErr := ioutil.ReadFile(dPath + "header.html")
    footerFile, footErr := ioutil.ReadFile(dPath + "footer.html")

    if headErr != nil || footErr != nil {
        http.Error(wr, headErr.Error(), http.StatusInternalServerError)
        http.Error(wr, footErr.Error(), http.StatusInternalServerError)
    }

    data := map[string]interface{}{
        "Title":  title,
        "Header": string(headerFile),
        "Footer": string(footerFile),
    }

    err := templates.ExecuteTemplate(wr, title+".html", data)

    if err != nil {
        http.Error(wr, err.Error(), http.StatusInternalServerError)
    }
}

func main() {
    http.HandleFunc("/", rootHandler)
    http.ListenAndServe(":8080", nil)
}

主页.html:

{{define "homeHTML"}}
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>{{.Title}} - MySite</title>
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>
    <body>
        {{.Header}}
        <h1>Welcome!</h1>
        {{.Footer}}
    </body>
</html>
{{end}}

标头.html:

{{define "headerHTML"}}
<header>
    <h1>MySite</h1>
    <br>
    <nav>
        <a href="/">Home</a>
    </nav>
</header>
{{end}}

页脚.html

{{define "footerHTML"}}
<footer>
    <p>Thank You for Visiting</p>
</footer>
{{end}}

这是完整的工作示例。

temps 文件夹内的 home.html:

{{define "homeHTML"}}

{{template "headHTML" .}}

{{template "headerHTML" .}}

{{template "footerHTML" .}}

{{end}}

数据文件夹内的head.html:

{{define "headHTML"}}
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>{{.title}} - MySite</title>
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>  
{{end}}

数据文件夹内的 header.html

{{define "headerHTML"}}
<header>
    {{.header}}
    <h1>Welcome to my site!</h1>
    <br>
    <nav>
        <a href="/">Home</a>
    </nav>
</header>
{{end}}

数据文件夹内的 footer.html:

{{define "footerHTML"}}
<h1>Welcome! {{.footer}}</h1>
<footer>
<p>Thank You for Visiting</p>
</footer>
</body>
</html>
{{end}}

代码将是这样的

package main

import (
    "html/template"
    "io/ioutil"
    "net/http"
    "path/filepath"
    "strings"
)

var tPath = "./temps/"
var dPath = "./data/"

var templateDirs = []string{"temps", "data"}
var templates *template.Template

func getTemplates() (templates *template.Template, err error) {
    var allFiles []string
    for _, dir := range templateDirs {
        files2, _ := ioutil.ReadDir(dir)
        for _, file := range files2 {
            filename := file.Name()
            if strings.HasSuffix(filename, ".html") {
                filePath := filepath.Join(dir, filename)
                allFiles = append(allFiles, filePath)
            }
        }
    }

    templates, err = template.New("").ParseFiles(allFiles...)
    return
}

func init() {
    templates, _ = getTemplates()
}

func rootHandler(wr http.ResponseWriter, req *http.Request) {
    title := "home"

    data := map[string]interface{}{
        "title":  title,
        "header": "My Header",
        "footer": "My Footer",
    }

    err := templates.ExecuteTemplate(wr, "homeHTML", data)

    if err != nil {
        http.Error(wr, err.Error(), http.StatusInternalServerError)
    }
}

func main() {
    http.HandleFunc("/", rootHandler)
    http.ListenAndServe(":8080", nil)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GoLang 中的 HTML 部分 的相关文章

  • 如何从非英语字符串解析go中的月份

    我想将以下字符串解析为 go 中的日期 This item will be released on March 9 2014 我跟着this https stackoverflow com questions 14106541 go par
  • javascript中输入类型时间的值

    我有这个html
  • 如何在 Java 中使用 HTML 解析器和 Apache Tika 来提取所有 HTML 标签?

    我下载了 tika core 和 tika parser 库 但找不到将 HTML 文档解析为字符串的示例代码 我必须删除网页源的所有 html 标签 我能做些什么 如何使用 Apache Tika 进行编码 您想要 html 文件的纯文本
  • 使用php表单更改href链接

    我正在制作一个带有搜索栏的网站 我想让搜索栏在 搜索 并显示结果后具有交互性 所以我希望 href 根据正在使用的 Id 进行更改 例如 有人搜索 Pinecones 如果它在数据库中 它将有一个 ID 在本例中是 4 一旦他们搜索它 它就
  • 如何在表格的 tbody/thead 部分周围创建边框?

    我正在尝试创建一个包含表格数据的页面 该页面必须显示为多个表格 然而 我有两个相互冲突的要求需要解决 每个表格周围都必须有边框 每个表格的列宽必须能够根据内容重新调整大小 但是 所有表中的列宽必须一致 即列的大小基于所有表中该列中最大的单元
  • 水平平滑滚动 100px

    Heyjo problem 一周以来我一直在寻找 javascript 或 jQuery 代码 以便在我的网站上实现滚动按钮 我失败的那一刻是按钮应该多次工作的时候 他的任务不是滚动到专用元素 而是应该向左滚动 例如 100px 此外 滚动
  • 为什么字体扩展仅适用于 PDF,而不适用于其他格式(HTML、XLS、DOC)?

    通过 Jaspersoft Studio 我们使用以下设置将用于 Web 应用程序的内置 Windows Calibri 字体变体导出到字体扩展 JAR 中 导出的jrfontextensions jar内的目录结构如下 jrfontext
  • 如何保留用户的输入打印?

    我正在尝试添加用户的评论 所以我只是尝试读取输入并将其发送以进行打印 但问题是 一旦我刷新页面或输入另一个输入 打印的输入就会消失 因此 即使刷新页面或重新输入新评论 我也希望始终保持所有用户的显示 代码 div div
  • 每 2 行后使 html 表格的边框变厚

    我创建了一个包含一些内容的表 其中有 12 行和 2 列 我想显示边框 但每 4 行之后 我想将水平边框设置为比正常情况更粗 怎么做 请在这里帮忙 试试这个选择器 table tr nth of type 4n td border bott
  • 如何使自定义 Web 组件可聚焦?

    我正在写一个自定义网络组件 https github com denilsonsa html5 knob这意味着是互动的 我如何告诉浏览器这个自定义组件应该获得焦点 我希望我的自定义元素 可以聚焦 通过选项卡导航 集中注意力时可以接收按键信
  • jQuery mobile 中的文本区域高度和宽度?

    我修复了 jQuery mobile 中文本区域元素的高度 并且在纵向中得到了完美的高度和宽度 但在横向中宽度没有放大 谁能帮我 提前致谢 HTML
  • VBA 完成 Internet 表单

    我正在寻找将 Excel 中的值放入网页的代码 Sub FillInternetForm Dim IE As Object Set IE CreateObject InternetExplorer Application IE naviga
  • 浮动图像周围具有最小列宽的流动文本

    我想要一种方法来防止流动文本列变得太窄 例如 在一列 HTML 文本中 有一个图像浮动到左侧 正如预期的那样 文本沿着图像周围的列的右侧向下流动 但是 如果图像几乎与列一样宽 则文本最终会非常窄 在这种情况下 我希望文本简单地not流过图像
  • 如何使用javascript确保元素仅在圆上朝一个方向移动?

    好吧 我承认我对三角学真的很糟糕 出于上下文的考虑 我将添加我在这里提到的问题中的内容 参考问题 https stackoverflow com a 39429290 168492 https stackoverflow com a 394
  • 如何通过单击链接来更改 div 的内容?

    这是我的网页的 修改后的 jsfiddle 它还有很多 而且定位是正确的 与此相反 http jsfiddle net ry0tec3p 1 http jsfiddle net ry0tec3p 1 a href class btn1 st
  • 如何在模态打开时防止主体滚动

    我在用着W3schools 模态脚本 https www w3schools com howto tryit asp filename tryhow css modal我想添加一个功能 防止模型打开时整个主体滚动 我根据我的需要对原始脚本做
  • 如何始终将焦点保持在文本框中

    我创建了一个包含两个 div 的 HTML 页面 左侧的 div 页面的 90 是 ajax 结果的目标 右侧的 div 页面的 10 包含一个文本框 该页面的想法是在文本框中输入零件编号 通过条形码扫描仪 并显示与该零件编号匹配的绘图 显
  • 表单发布请求并存储收到的数据

    我有一个非常简单的表单 在提交时发出发布请求
  • 如何从浏览器向服务器发送“页面将关闭”消息?

    我想向每个 html 文档添加一个脚本 JavaScript 该脚本向服务器发送两条消息 页面确实打开了 页面将关闭 此消息包含页面打开的时间 打开消息应在文档加载时 或加载完成时 发送 这是简单的部分 The close message
  • 主页(网格)上的缩略图现在显得模糊。如何纠正?

    我不知道这看起来是否愚蠢 但从早上开始我就无法纠正这个突然出现在我的博客网站上的错误www candidopinions in http www candidopinions in 我有一个网格视图模板 其中博客文章中的特色图像作为调整大小

随机推荐