如何用 Go 将多个字符串解析为模板?

2024-04-30

有没有像这样的简单方法template.ParseFiles("base.html", "home.html")但是对于字符串来说,如何从一组字符串构建模板?

我有一个基本模板和一个页面模板列表(全部为字符串),我想在基本模板之上构建它们。

我想出了如何合并它们,但我的解决方案非常冗长,而且看起来不够优雅,即使可以工作。


您可以使用以下命令创建一个新的空模板template.New() https://golang.org/pkg/html/template/#New function。然后您可以使用Template.New() https://golang.org/pkg/html/template/#Template.New method创建一个新的、空的、联系模板。你可以使用以下方法解析“到”这个Template.Parse() https://golang.org/pkg/html/template/#Template.Parse method.

它可能是这样的:

func parseTemplates(templs ...string) (t *template.Template, err error) {
    t = template.New("_all")

    for i, templ := range templs {
        if _, err = t.New(fmt.Sprint("_", i)).Parse(templ); err != nil {
            return
        }
    }

    return
}

测试它:

t, err := parseTemplates(
    `{{define "one"}}I'm #1.{{end}}`,
    `{{define "two"}}I'm #2, including #1: {{template "one" .}}{{end}}`,
)
if err != nil {
    panic(err)
}

if err = t.ExecuteTemplate(os.Stdout, "two", nil); err != nil {
    panic(err)
}

输出(尝试一下去游乐场 https://play.golang.org/p/8GYU1kh6CK):

I'm #2, including #1: I'm #1.

另请参阅相关问题:转到模板名称 https://stackoverflow.com/questions/41176355/go-template-name/41187671#41187671

Note

虽然我们可以调用Template.Parse() https://golang.org/pkg/html/template/#Template.Parse方法在单个模板上多次,并且它会解析多个named模板正确,仍然建议购买新的template.Template https://golang.org/pkg/html/template/#Template对于每个通过调用Template.New()。因为如果模板文本有内容outside的命名模板,它们将被覆盖,并且仅保留最后一个。例如:abc {{define "one"}}no 1{{end}}。静态文本"abc"将会被后续的丢失Template.Parse() call.

文档中也指出了这一点Template.Parse():

(在使用同一接收者模板对 Parse 进行多次调用时,只有一次调用可以包含除空格、注释和模板定义之外的文本。)

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

如何用 Go 将多个字符串解析为模板? 的相关文章

随机推荐

  • 如何使用 Linq 查询 Azure 存储表?

    我不确定具体在哪里 但我在某个地方有错误的想法 我首先尝试使用 linq 查询 azure 存储表 但我无法弄清楚它是如何完成的 通过查看各种来源 我得到以下信息 List
  • 出现错误 /usr/bin/env: 节点:权限被拒绝

    我已经在我的服务器 Centos 上完成了 ODOO v9 安装 一切都已安装成功 登录页面也可以正常工作 但登录后我收到一个包含以下错误的页面 usr bin env node Permission Denied 我尝试更改权限 但我的问
  • 法线在 openGL 中表现得很奇怪

    我一直在为 openGl 编写一个 obj 加载器 几何体加载得很好 但法线总是混乱的 我尝试在两个不同的程序中导出模型 但似乎没有任何效果 据我所知 这就是将法线放入 GL TRIANGLES 的方法 glNormal3fv norm1
  • 在 C# 中通过 Sharpsvn 使用 client.status

    我想使用状态方法 但我不明白它是如何工作的 有人可以给我看一个使用示例吗 EventHandler lt SvnStatusEventArgs gt statusHandler new EventHandler
  • Rails 验证:将输入限制为特定值

    我正在寻找 Rails Way 来编写验证 将可接受的输入值限制为预定列表 就我而言 我只想接受值 5 2 2 5 和nil 然而 我认为这最好作为一个一般性问题 如何在 Rails 模型中预定义可接受的条目值列表 Thanks valid
  • WSO2 ESB 中的跟踪日志文件

    在 WSO2 ESB 中 它到底显示 wso2 esb trace log 文件什么 什么时候有用 并且 与 WSO2 ESB 中的其他典型日志文件有何不同 例如 使用 wso2 esb service log 或 wso2 esb err
  • android开发打开文件txt并返回内容[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 在互联网上搜索并找不到有效的代码 如
  • 片段重新进入过渡不起作用。需要帮助澄清各种片段转换

    我正在 RecyclerView 中的项目之间实现片段过渡动画 以及显示单击项目的详细信息的片段 换句话说 相对常见的 单击列表中的一张卡片 它会展开为详细视图 而列表的其余部分则消失 之类的事情 从 RecyclerView 项目到详细视
  • Python-错误:无法打开.png文件[重复]

    这个问题在这里已经有答案了 不确定我做错了什么 我正在遵循有关如何使用 Python 和 PyGame 制作游戏的教程 但收到错误 pygame error Couldn t open resources images dude png 我
  • 如何解释R中SVM的预测结果?

    我是 R 新手 我正在使用e1071R 中的 SVM 分类包 我使用了以下代码 data lt loadNumerical model lt svm data ncol data data ncol data gamma 10 print
  • 如何区分类实现中两个协议的相同方法名称?

    我有两个协议 protocol P1 void printP1 void printCommon end protocol P2 void printP2 void printCommon end 现在 我在一个类中实现这两个协议 inte
  • 让 csv.Sniffer 使用带引号的值

    我正在尝试使用python 的 CSV 嗅探工具 https docs python org 3 library csv html csv Sniffer正如许多 StackOverflow 答案中所建议的那样 猜测给定的 CSV 文件是否
  • Apache Ignite - 选择查询返回 0 条记录,但数据存在于缓存中

    我们使用 Apache Ignite 2 9 0 它是一个具有 Zookeeper 发现功能的 5 节点集群 我们通过从 Intellij 执行 DDL 语句在 Ignite 中创建表 然后我们可以通过从 Intellij 本身运行选择查询
  • 在 AppEngine 上的 iText 中添加新字体时出现 NoClassDefFoundError

    我有一个 appengine java 项目 其中包括有时创建 pdf pdf 文档有我试图包含的特殊字体 BaseFont bf BaseFont createFont resources AlexBrush Regular ttf Ba
  • SQLAlchemy 的数据类默认不填充 postgres 数据库

    我在用dataclasses与 SQLAlchemy 经典映射范例相结合 当我定义一个dataclass与默认值相结合int and strSQLAlchemy 不会填充字段int and strs 但它确实填充了List and date
  • 如何实施刷新令牌轮换?

    如果我正确理解了刷新令牌轮换 这意味着每次我们请求新的访问令牌时 我们也会获得一个新的刷新令牌 如果多次使用刷新令牌 我们会使某个用户之前使用的所有刷新令牌失效 并且用户必须再次执行身份验证过程 这是否意味着我们需要将所有刷新令牌 所有旧的
  • python - 创建具有多种颜色的图像并添加文本

    我正在尝试用 python 中的一些文本创建图像 例如 import PIL from PIL import ImageFont from PIL import Image from PIL import ImageDraw font Im
  • Keras 自定义损失函数:访问当前输入模式

    在 Keras 带有 Tensorflow 后端 中 当前输入模式可用于我的自定义损失函数吗 当前输入模式被定义为用于产生预测的输入向量 例如 请考虑以下情况 X train X test y train y test train test
  • 构建和部署之间的区别?

    和有什么区别build and deploy and re deploy 当你只有一些时应该做什么HTML变化和没有Java代码改变 我应该做一个build and deploy或者只是一个re deploy 免责声明 定义构建和部署的含义
  • 如何用 Go 将多个字符串解析为模板?

    有没有像这样的简单方法template ParseFiles base html home html 但是对于字符串来说 如何从一组字符串构建模板 我有一个基本模板和一个页面模板列表 全部为字符串 我想在基本模板之上构建它们 我想出了如何合