How to replace string in Go template?

huangapple go评论76阅读模式
英文:

How to replace string in Go template?

问题

我使用"text/template"模块。

我有一个结构体用于解析来自Blogger的XML:

type Media struct {
    ThumbnailUrl string `xml:"url,attr"`
}

type Entry struct {
    ID string `xml:"id"`
    Published Date `xml:"published"`
    Updated Date `xml:"updated"`
    Draft Draft `xml:"control>draft"`
    Title string `xml:"title"`
    Content string `xml:"content"`
    Tags Tags `xml:"category"`
    Author Author `xml:"author"`
    Media Media `xml:"thumbnail"`
    Extra string
}

然后我创建了如下的Go模板:

[image]
    src = "{{ replace .Media.ThumbnailUrl 's72-c' 's1600' }}"
    link = ""
    thumblink = "{{ .Media.ThumbnailUrl }}"
    alt = ""
    title = ""
    author = ""
    license = ""
    licenseLink = ""

replace函数未定义。我想要替换{{ .Media.ThumbnailUrl }}中的URL。

例如:

从这个URL:

https://2.bp.blogspot.com/-DEeRanrBa6s/WGWGwA2qW5I/AAAAAAAADg4/feGUc-g9rXc9B7hXpKr0ecG9UOMXU3_VQCK4B/s72-c/pemrograman%2Bjavascript%2B-%2Bpetanikode.png

到这个URL:

https://2.bp.blogspot.com/-DEeRanrBa6s/WGWGwA2qW5I/AAAAAAAADg4/feGUc-g9rXc9B7hXpKr0ecG9UOMXU3_VQCK4B/s1600/pemrograman%2Bjavascript%2B-%2Bpetanikode.png

英文:

I use "text/template" module.

I have struct like this to parse XML from Blogger

type Media struct {
    ThumbnailUrl string `xml:"url,attr"`
}


type Entry struct {
	ID string `xml:"id"`
	Published Date `xml:"published"`
	Updated Date `xml:"updated"`
	Draft Draft `xml:"control>draft"`
	Title string `xml:"title"`
	Content string `xml:"content"`
	Tags Tags `xml:"category"`
	Author Author `xml:"author"`
	Media Media `xml:"thumbnail"`
	Extra string
}

Then I create Go Template like this

[image]
    src = "{{ replace .Media.ThumbnailUrl 's72-c' 's1600' }}"
    link = ""
    thumblink = "{{ .Media.ThumbnailUrl }}"
    alt = ""
    title = ""
    author = ""
    license = ""
    licenseLink = ""

The replace function not defined. I want to replace URL from <code>{{ .Media.ThumbnailUrl }}</code>

For example:

from this URL

https://2.bp.blogspot.com/-DEeRanrBa6s/WGWGwA2qW5I/AAAAAAAADg4/feGUc-g9rXc9B7hXpKr0ecG9UOMXU3_VQCK4B/s72-c/pemrograman%2Bjavascript%2B-%2Bpetanikode.png

To this URL

https://2.bp.blogspot.com/-DEeRanrBa6s/WGWGwA2qW5I/AAAAAAAADg4/feGUc-g9rXc9B7hXpKr0ecG9UOMXU3_VQCK4B/s1600/pemrograman%2Bjavascript%2B-%2Bpetanikode.png

答案1

得分: 11

你可以编写一个辅助视图函数,像这样:

func replace(input, from, to string) string {
    return strings.Replace(input, from, to, -1)
}

funcMap := template.FuncMap{
    "replace": replace,
}
template := template.New("").Funcs(funcMap)

然后使用template来渲染视图。

代码参考链接如下:

  1. template_funcs.go
  2. templates.go
英文:

> You can write a helper view function like this

func replace(input, from,to string) string {
	return strings.Replace(input,from,to, -1)
}

funcMap = template.FuncMap{
		&quot;replace&quot;:  replace,
}
template := template.New(&quot;&quot;).Funcs(internalFuncMap)

and use the template to render the view.

> code ref links

  1. https://github.com/sairam/kinli/blob/master/template_funcs.go#L57-L59
  2. https://github.com/sairam/kinli/blob/master/templates.go#L48

huangapple
  • 本文由 发表于 2017年1月14日 15:33:47
  • 转载请务必保留本文链接:https://go.coder-hub.com/41647788.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定