golang template实现模板layout及传递funcMaps

golang template用法很简单:
tpl, _ := template.ParseFiles("templates/post.html")
tpl.Execute(w, nil)

但是一个模板的布局有很多公共的部分,通过我们会对template做layout,ParseFiles方法可以传入多个模板,如下实现:
layout.html
{{define "layout"}}
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{{template "body" .}}
</body>
</html>
{{end}}

post.html
{{template "layout" .}}
{{define "body"}}
<div>
    this is body
</div>
{{end}}

golang实现(将主模板作为第一个参数)语句如下:
tpl, _ := template.ParseFiles("templates/post.html", "templates/layout.html")
tpl.Execute(w, nil)

如果传入funcMap:
var funcMaps = template.FuncMap{
    "empty": func(str string) bool {
        if str == "" {
        return true
        } else {
        return false
        }
    },
}
 
 
tpl, err := template.New("post.html").Funcs(funcMaps).ParseFiles("templates/post.html", "templates/layout.html")
if err != nil {
    //...
}
 
tpl.Execute(w, nil)

这里要特别注意的是New方法的参数是最外层container的文件名,而非路径

时间: 2024-08-01 12:50:19

golang template实现模板layout及传递funcMaps的相关文章

C++中通过模板向函数传递数组长度

我们知道,在C/C++中,向一个函数传递数组时,实际上传送的是这个数组的首地址,也即是一个指针类型.所以,在函数中,我们没有办法知道这个传递进来的数组的长度到底为多长,一个普遍的方法就是再增加一个参数,来记录传递进来的数组的长度. 不过在C++中,使用模板机制,可以很好地解决这个问题,如下面的代码所示: #include <iostream> using namespace std; template<class T, int N> void array(T (&param

16.2. Template 配置模板

WEB-INF/tiles.xml <tiles-definitions> <definition name="index" path="/WEB-INF/jsp/index.jsp"> <put name="title" value="Tiles Example" /> <put name="header" value="/WEB-INF/jsp/hea

C++中函数模板(function template) 详解

C++的模板(template)是泛型编程(generic programming)的基础; 面向对象编程 是 运行(run time)时 知道类型(type); 泛型编程 是编译(compilation) 知道类型; 函数模板(function template)包含模板参数列表(template parameter list); 每个参数类型之前必须包含关键字typename或class, 尽量使用typename, 表达意思更加明确; 非类型模板参数(Nontype Template Pa

C++中 模板Template的使用

1.在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢? 答:class用于定义类,在模板引入c++后,最初定义模板的方法为:template,这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typename这个关键字,它的作用同class一样表明后面的符号为一个类型,这样在定义模板的时候就可以使用下面的方式了: template.在模板定义语法中关键字cla

自定义Adapter并通过布局泵LayoutInflater抓取layout模板编辑每一个item实现思路_Android

写在前面的话: 看到标题这么长可能大家有点抓狂了,是的,我在刚刚学这一篇的时候有一些不理解,什么是布局泵?编辑每一个模板然后什么是自定义Adapter?下面我们开始学习这一篇的内容 首选上一张图,实现效果:   逻辑解析: 首先上面这个图是最终的实现效果了,有点像我们的通讯录联系人的排版方式,说一下layout的布局吧.很简单,其实就是一个ListView组件.但是这个ListView组件用的Adapter有一点不同.我们自己定义了一个adapter并且通过getview方法对每一个条目进行了编

PHP模板引擎SMARTY

模板 用PHP实现MVC开发模式的逻辑层和表示层有多种模板引擎可供选择, 但是官方引擎SMARTY诞生后,选择就有了变化.它的理念和实现都是 相当"前卫"的.本文主要讨论SMARTY之于其他模板引擎的不同特点, 简要介绍了该引擎的安装及使用,并用一个小的测试案例对比了 SMARTY和PHPLIB template的速度和易用性. 一.MVC需要模板 MVC最早是在SmallTalk语言的开发过程中总结出的一种设计模式,MVC分别代 表了"模型"."视图&q

如何利用T4 模板提升ASP.NET MVC开发速度

最近由于需要在框架中提供一些自定义模板的功能,找到了一篇博客,可惜似乎是翻译工具直接翻的,读不通顺,就试着自己翻译下,我不会完全翻译原文的句子,可能会对原文进行小范围的我认为更合适的句子并添加些注释,,原文地址如下: http://blogs.msdn.com/b/webdev/archive/2009/01/29/t4-templates-a-quick-start-guide-for-asp-net-mvc-developers.aspx 在我们最近的博客中提到的ASP.NET MVC Re

C++模板编程

原文链接:http://www.cppblog.com/besterChen/archive/2010/07/22/121000.html 当我们越来越多的使用C++的特性, 将越来越多的问题和事物抽象成对象时, 我们不难发现:很多对象都具有共性. 比如 数值可以增加.减少:字符串也可以增加减少. 它们的动作是相似的, 只是对象的类型不同而已. C++ 提供了"模板"这一特性, 可以将"类型" 参数化, 使得编写的代码更具有通用性. 因此大家都称模板编程为 &quo

C#开发微信门户及应用(27)-公众号模板消息管理

原文:C#开发微信门户及应用(27)-公众号模板消息管理 通过模板消息接口,公众号能向关注其账号的用户发送预设模板的消息.模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等.不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息.本文主要介绍基于C#开发实现公众号模板消息的管理功能. "模板消息功能的推出,将极大地增强服务号的服务通知能力",在一些一直期待微信模板消息功能开放的公众号运营者看来,微信一对一沟通的社交属性