文本/模板:“不能用0结果调用方法/函数”。 [英] Text/template: "can't call method/function with 0 results."

查看:145
本文介绍了文本/模板:“不能用0结果调用方法/函数”。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在不返回任何值的模板中执行函数?这里是例子:

pre $ func main(){
u,err:= url.Parse(http:// example.com/test?param1=true&param2=true)
if err!= nil {
log.Fatal(err)
}
m:= u.Query( )
m.Del(param1)// param1成功删除!
u.RawQuery = m.Encode()
fmt.Println(u.RawQuery)

const tmpl =`
{{$ m:= .Query} }
{{$ m.Delparam2}}<! - 无法删除param2! - >
{{.RawQuery}}
`
t:= template.Must(template.New()。Parse(tmpl))
err = t.Execute(os。 Stdout,u)
if err!= nil {
log.Println(execution template:,err)
}

}



请参阅此代码.golang.org



我知道在模板中不应该有太多的逻辑,但对无法返回任何值的运行函数的无知似乎对我而言有趣的问题。

解决方案

Go中的模板不像其他语言中的模板(例如PHP)。使用 template.FuncMap 为您的模板创建自定义函数。

  package main 

import(
fmt
log
net / url
os
text / template


func main(){
funcMap:= template.FuncMap {
delete:deleteMap,
}

u,err:= url.Parse(http://example.com/test?param1=true& )
if err!= nil {
log.Fatal(err)
}

u = deleteMap(u,param1)//作品在常规代码和模板中

fmt.Println(u.RawQuery)

const tmpl =`
{{$ m:= delete。 param2}}<! - WORKS! - >
{{$ m.RawQuery}}
`
t:= template.New()。Funcs(funcMap)
t = template.Must(t.Parse(tmpl) )

err = t.Execute(os.Stdout,u)

if err!= nil {
log.Println(execution template:,err )
}

}

func deleteMap(u * url.URL,关键字符串)* url.URL {
m:= u.Query( )
m。Del(key)// key已成功删除!
u.RawQuery = m.Encode()
return u
}

或者,尝试使用游乐场版本


How can I execute function in templates that returns no value? Here is example:

func main() {
    u, err := url.Parse("http://example.com/test?param1=true&param2=true")
    if err != nil {
        log.Fatal(err)
    }
    m := u.Query()
    m.Del("param1") // param1 successful deleted!
    u.RawQuery = m.Encode()
    fmt.Println(u.RawQuery)

    const tmpl = `
    {{$m := .Query}}
    {{$m.Del "param2"}} <!-- failed to delete param2! -->
    {{.RawQuery}}
    `
    t := template.Must(template.New("").Parse(tmpl))
    err = t.Execute(os.Stdout, u)
    if err != nil {
        log.Println("executing template:", err)
    }

}

see this code in play.golang.org


I know that in templates shouldn't be much logic, but ignorance of running function that returns no value seems to me interesting issue.

解决方案

Templates in Go are not like those in other languages (e.g. PHP). Use template.FuncMap to create custom functions for your templates.

package main

import (
    "fmt"
    "log"
    "net/url"
    "os"
    "text/template"
)

func main() {
    funcMap := template.FuncMap{
        "delete": deleteMap,
    }

    u, err := url.Parse("http://example.com/test?param1=true&param2=true")
    if err != nil {
        log.Fatal(err)
    }

    u = deleteMap(u, "param1") // works in regular code and templates

    fmt.Println(u.RawQuery)

    const tmpl = `
    {{$m := delete . "param2"}} <!-- WORKS! -->
    {{$m.RawQuery}}
    `
    t := template.New("").Funcs(funcMap)
    t = template.Must(t.Parse(tmpl))

    err = t.Execute(os.Stdout, u)

    if err != nil {
        log.Println("executing template:", err)
    }

}

func deleteMap(u *url.URL, key string) *url.URL {
    m := u.Query()
    m.Del(key) // key successful deleted!
    u.RawQuery = m.Encode()
    return u
}

Or, try the playground version.

这篇关于文本/模板:“不能用0结果调用方法/函数”。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆