英文:
Multiple templates with FuncMap
问题
目标:在HTTP服务器中使用多个模板,我想将一些字符串中的换行符转换为<br/>
标签。
一个简化的示例:
我有两个模板a.tmpl
和b.tmpl
,内容如下:
模板a {{dosomething}}
(其他模板类似)。它们都位于名为templates
的目录中。我认为我需要创建一个函数来进行\n
到<br />
的替换(上面的dosomething
)。
这是我的(不工作的)示例代码:
package main
import (
"log"
"text/template"
)
func main() {
// funcMap := template.FuncMap{
// "dosomething": func() string { return "done something" },
// }
templates, err := template.ParseGlob("templates/*.tmpl")
if err != nil {
log.Fatal(err)
}
log.Printf("%#v", templates)
}
错误信息是:
2013/03/04 20:08:19 template: a.tmpl:1: function "dosomething" not defined
exit status 1
这是有道理的,因为在解析时,函数dosomething
是未知的。
- 我如何在多个模板中使用我的函数?是否只能按照这里的问题中的答案进行操作?
- 这是正确的方法吗?请记住,我想要更改一些字符串的文本,类似于文档中的标题示例(http://golang.org/pkg/text/template/#FuncMap - Example (Func))。
- 如何在以下代码中访问
b.tmpl
:
<!-- -->
package main
import (
"log"
"text/template"
)
func main() {
funcMap := template.FuncMap{
"dosomething": func() string { return "done something" },
}
t, err := template.New("a.tmpl").Funcs(funcMap).ParseGlob("templates/*.tmpl")
if err != nil {
log.Fatal(err)
}
log.Printf("%#v", t)
}
英文:
The Goal: using multiple templates in an HTTP server where I want to change newlines into <br/>
tags on some strings.
A stripped down example:
I have two templates a.tmpl
and b.tmpl
which look like this:
Template a {{dosomething}}
(and similar the other template). Both reside in a directory called templates
. I believe that I need to create a function to do the \n
-> <br />
replacement (dosomething
above).
This is my (non working) sample code:
package main
import (
"log"
"text/template"
)
func main() {
// funcMap := template.FuncMap{
// "dosomething": func() string { return "done something" },
// }
templates, err := template.ParseGlob("templates/*.tmpl")
if err != nil {
log.Fatal(err)
}
log.Printf("%#v", templates)
}
The error message is:
2013/03/04 20:08:19 template: a.tmpl:1: function "dosomething" not defined
exit status 1
which makes sense, because during the parsing time, the function dosomething
is not known.
-
How can I use my function in multiple templates? Is the answer to this question here on so the only way to go?
-
Is this the correct approach? Remember, I'd like to change the text on some strings, similar to the title example in the documentation (http://golang.org/pkg/text/template/#FuncMap - Example (Func))?
-
How do I access
b.tmpl
in the following code:
<!-- -->package main import ( "log" "text/template" ) func main() { funcMap := template.FuncMap{ "dosomething": func() string { return "done something" }, } t, err := template.New("a.tmpl").Funcs(funcMap).ParseGlob("templates/*.tmpl") if err != nil { log.Fatal(err) } log.Printf("%#v", t) }
答案1
得分: 3
你最后的代码片段看起来没问题。
要渲染b.tmpl,只需调用
t.ExecuteTemplate(w, "b.tmpl", data)
你可以以同样的方式访问a.tmpl;为了保持一致性,我建议这样做,而不是在调用New时将名称设置为"a.tmpl"。
英文:
Your last snippet of code looks about right to me.
To render b.tmpl, just call
t.ExecuteTemplate(w, "b.tmpl", data)
You can access a.tmpl the same way; I would recommend doing this for consistency, rather than setting the name to "a.tmpl" in the call to New.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论