2017-04-18 24 views
0

我已經在這個代碼我正在重定向到login.html的寫了一小段代碼中去如何發送變量及其值的HTML

func loginHandler(w http.ResponseWriter, r *http.Request) { 
    log.Println("loginHandler") 
    log.Println("request url is", r.RequestURI) 
    log.Println("request method", r.Method) 
    requestbody, _ := ioutil.ReadAll(r.Body) 
    log.Println("request body is", string(requestbody)) 
    if r.Method == "POST" { 
     us, err := globalSessions.SessionStart(w, r) 
     if err != nil { 
      http.Error(w, err.Error(), http.StatusInternalServerError) 
      return 
     } 
     us.Set("LoggedInUserID", "000000") 
     w.Header().Set("Location", "/auth") 
     w.WriteHeader(http.StatusFound) 
     return 
    } 
    outputHTML(w, r, "static/login.html") 
} 

func outputHTML(w http.ResponseWriter, req *http.Request, filename string) { 
 
\t log.Println("outputHTML") 
 
\t requestbody, _ := ioutil.ReadAll(req.Body) 
 
\t log.Println("request body is", string(requestbody)) 
 
\t log.Println("request body is", requestbody) 
 
\t file, err := os.Open(filename) 
 
\t if err != nil { 
 
\t \t http.Error(w, err.Error(), 500) 
 
\t \t return 
 
\t } 
 
\t defer file.Close() 
 
\t fi, _ := file.Stat() 
 
\t http.ServeContent(w, req, file.Name(), fi.ModTime(), file) 
 
}

。現在我想發送一個變量,讓它成爲一些名爲testvariable的字符串,並將其值賦給login.html。

+0

如何重定向? outputHTML == http.Redirect()?如果是的話在重定向你兩個選項。 1)將數據作爲URL參數傳遞並在後端抓取參數,傳遞給模板並進行渲染。 2)重定向到另一個處理所有邏輯的後端端點,設置數據並呈現模板。您無法直接在重定向上傳遞數據。示例myTemplate.ExecuteTemplate(w,「base」,data)。另請參閱html包https://golang.org/pkg/html/template/ – reticentroot

+0

請顯示'outputHTML'的定義,因爲這是呈現您的登錄頁面的函數。 – mkopriva

+0

@mkopriva,我用相關數據更新了我的問題,我想現在 – vijay

回答

0

爲了能夠在html中顯示值,你可以使用Go的html/template包。

首先,您需要指定HTML頁面中希望顯示值的位置,使用html/template包可以與template actions一起使用。

「操作」 - 數據評估和控制結構 - 由 分隔「{{」和「}」

下一步,你需要刪除​​功能,做不知道如何呈現模板,您可以使用Execute將登錄頁面與您的值一起顯示。

下面是一個例子:

login.html

<html> 
    <body> 
     <h1>{{.MyVar}}</h2> 
    </body> 
</html> 

outputHTML

func outputHTML(w http.ResponseWriter, filename string, data interface{}) { 
    t, err := template.ParseFiles(filename) 
    if err != nil { 
     http.Error(w, err.Error(), 500) 
     return 
    } 
    if err := t.Execute(w, data); err != nil { 
     http.Error(w, err.Error(), 500) 
     return 
    } 
} 

而且你loginHandler

func loginHandler(w http.ResponseWriter, r *http.Request) { 

    // do whatever you need to do 

    myvar := map[string]interface{}{"MyVar": "Foo Bar Baz"} 
    outputHTML(w, "static/login.html", myvar) 
} 

在此處瞭解更多模板:html/template以及有關如何爲模板本身編程的信息,請參閱text/template的文檔