如何在golang中将FuncMaps添加到已解析的模板中

时间:2015-12-30 05:55:30

标签: go

我的模板最初是在应用程序启动时解析的(显然出于速度原因,这样)

var templates = template.New("template")

filepath.Walk("views", func(path string, info os.FileInfo, err error) error {
        if strings.HasSuffix(path, ".html") {
            templates.ParseFiles(path)
        }

        return nil
})
log.Println("Templates Parsed")

然后我将我的funcmaps添加到他们自己的函数中(因为我需要请求对象,所以我可以得到他们的会话数据)

func View(w http.ResponseWriter, r *http.Request, tmplN string, data interface{}) {

    tmpl := templates.Funcs(template.FuncMap{
        "username": func() string {
            session := Sesh(r)
            username := ""
            if session.Values["username"] != nil {
                username = session.Values["username"].(string)
            }
            return username
        },
        "authenticated": func() bool {
            session := Sesh(r)
            authenticated := false
            if session.Values["authenticated"] != nil {
                authenticated = session.Values["authenticated"].(bool)
            }
            return authenticated
        },
    })

    err := tmpl.ExecuteTemplate(w, tmplN, data)
    if err != nil {
        log.Println("Error " + err.Error())
    }
}

但是,如果我在解析模板之前没有进行Funcs调用,它似乎无法正常工作,例如如果我尝试在我的register模板中使用,请执行以下操作:

{{ define "register" }}
    {{ template "_header" .}}

       {{ if authenticated }}
           // Call FuncMap function
       {{ end }}
<br/>
<br/>
<br/>
<div class="row align-center">
    <div class="large-4 columns text-center">
        <div id="RegistrationFormComponent"></div>
    </div>
</div>
    {{ template "_footer" .}}
{{ end }}

我收到错误&#34;注册&#34;不存在,因为函数authenticated在尝试解析时会抛出错误。有关如何使其按预期工作的任何信息都将非常感谢。

1 个答案:

答案 0 :(得分:1)

所以我想出来了,但我会在这里留下这个答案,因为它似乎无法在任何地方回答,基本上我可以定义一个冗余的Ion.with(MainActivity.this) .load("--URL TO POST JSON DATA--") .setJsonObjectBody(params[0]) .asJsonObject() .withResponse() .setCallback(new FutureCallback<Response<JsonObject>>() { @Override public void onCompleted(Exception e, Response<JsonObject> result) { if (result != null) { if (result.getHeaders().code() == 200) { Toast.makeText(MainActivity.this, "Login Success", Toast.LENGTH_SHORT).show(); } else if (result.getHeaders().code() == 401) { Toast.makeText(MainActivity.this, "Invalid Username or password", Toast.LENGTH_LONG).show(); } else { Toast.makeText(MainActivity.this, "Something wrong check connection !!!", Toast.LENGTH_SHORT).show(); } } } }); ,它模仿我将与会话一起使用的那个,以及只需将它们空白,然后我可以使用我的FuncMap函数中的FuncMap覆盖它们(在问题帖子中可见),如下所示:

view