当前位置: 首页 > article >正文

如何使用go的template模版

 

tmpl, err = tmpl.New("page_content").Parse(fmt.Sprintf(`{{template "%s" .}}`, contentBlockName))
  1. 创建新块
    • tmpl.New("page_content"):在模板对象tmpl中定义一个新的、名为"page_content"的块。
    • 这个块是动态的,之前并不存在,是运行时根据传入的contentBlockName创建的。
  2. 填充内容
    • Parse(fmt.Sprintf({{template "%s" .}}, contentBlockName))
      • 使用fmt.Sprintf生成一个模板指令:{{template "home_content" .}}
      • 这个指令表示:在当前模板上下文中,渲染名为home_content的块,并将当前数据(.)传递给它。
    • 换句话说,home_content块的内容会被插入到page_content块中。
  3. 动态替换
    • 假设基础模板base.html中包含:
      <body>
      {{template "page_content" .}}
      </body>
    • 在执行模板时,page_content块会被替换为home_content块的内容。

为什么复制模板

  • 避免污染原始模板
    • 如果不克隆模板,而是直接修改原始模板,会影响后续的模板调用。
    • 例如,如果在一次请求中动态定义了page_content块,其他请求可能也会无意中使用这个定义,导致逻辑混乱。
  • 支持并发调用
    • 在高并发场景中,多个请求可能同时调用renderTemplate函数。
    • 每个请求都需要一个独立的模板实例,以避免数据竞争和冲突。

整体流程

  • 模板加载
    • 加载基础模板(base.html)和页面模板(如home.html)。
    • 页面模板中定义了具体的块(如home_content)。
  • 动态块定义
    • 克隆模板对象,创建一个新的块(如page_content)。
    • 动态填充这个块的内容,指向传入的contentBlockName(如home_content)。
  • 模板渲染
    • 使用基础模板base.html进行渲染。
    • 在渲染过程中,page_content块会被替换为home_content块的内容,最终填充到HTML页面的<body>区域。

总结

通过动态创建和填充块,这种方法实现了模板的灵活性和可复用性:

  • 灵活性:可以根据不同的请求动态渲染不同的内容块。
  • 可复用性:基础模板保持不变,页面模板可以定义多个块,按需替换。

这种设计模式在需要动态生成HTML页面的Web应用中非常常见,能够有效提升开发效率和代码可维护性。


http://www.kler.cn/a/600032.html

相关文章:

  • Rust+WebAssembly:开启浏览器3D渲染新时代
  • 华为OD机试2025A卷 - 游戏分组/王者荣耀(Java Python JS C++ C )
  • 基于Python卷积神经网络(CNN)的mnist手写数字识别
  • JVM常见概念之条件移动
  • git安装教程
  • Java 基础入门代码示例解析
  • idea底部图标不小心关了,怎么重新打开?
  • Leetcode—15. 三数之和(哈希表—基础算法)
  • Java多线程与高并发专题——使用 Future 有哪些注意点?Future 产生新的线程了吗?
  • 内网渗透-隧道通信
  • Python技术栈与数据可视化创意实践详解(三)
  • 【进阶编程】跨平台的 UI 框架
  • JVM 02
  • STM32G030移植RT-Thread
  • 学一个前端 UI 框架,要学些什么内容?
  • 当人类关系重构:从“相互需要”到“鹅卵石化”——生成式人工智能(GAI)认证的角色与影响
  • 探索AI的无限可能,体验智能对话的未来,大模型 API 演示
  • linux ptrace 图文详解(三) PTRACE_ATTACH 跟踪程序
  • Edge浏览器如何默认启动某个工作区 / 为工作区添加快捷方式
  • docker 容器 php环境中安装gd 、mysql 等扩展