通过会话变量在 Golang layout.tpl 中条件渲染 HTML

我使用 Gorilla 会话(通过 negroni-sessions)将我的用户会话存储在 cookie 中。我也github.com/unrolled/render用于我的 HTML 模板渲染:


main.go:


    package main


    import (

        ...

        "github.com/codegangsta/negroni"

        "github.com/goincremental/negroni-sessions"

        "github.com/goincremental/negroni-sessions/cookiestore"

        "github.com/julienschmidt/httprouter"

        "github.com/unrolled/render"

        ...

    )


    func init() {

        ...

        ren = render.New(render.Options{

            Directory:     "templates",

            Layout:        "layout",

            Extensions:    []string{".html"},

            Funcs:         []template.FuncMap{TemplateHelpers}, 

            IsDevelopment: false,

        })

        ...

    }


    func main() {

        ...

        router := httprouter.New()

        router.GET("/", HomeHandler)


        // Add session store

        store := cookiestore.New([]byte("my password"))

        store.Options(sessions.Options{

            //MaxAge: 1200,

            Domain: "",

            Path:   "/",

        })


        n := negroni.New(

            negroni.NewRecovery(),

            sessions.Sessions("cssession", store),

            negroni.NewStatic(http.Dir("../static")), 

        )


        n.UseHandler(router)

        n.Run(":9000")


    }

正如你在上面看到的,我使用了一个layout.html主 HTML 模板,它包含在任何页面呈现时,比如我的主页:


    package main


    import (

        "html/template"

        "github.com/julienschmidt/httprouter"

    )


    func HomeHandler(w http.ResponseWriter, r *http.Request, p httprouter.Params) {


        var model = struct {

            CatalogPicks   []PromotionalModelList

            ClearanceItems []Model

        }{

            CatalogPicks:   GetCatalogPicks(),

            ClearanceItems: GetClearanceItems(),

        }


        ren.HTML(w, http.StatusOK, "home", model)

    }

在我的layout.html主 HTML 模板中,我想呈现一个管理菜单,但前提是当前用户是管理员:


布局.html:


<!doctype html>

<html>

  <head>

    <meta charset="utf-8">

      <title>{{ template "title" . }}</title>

        ...

  </head>


  <body>


陪伴而非守候
浏览 258回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go