2017-04-18 8 views
0

は私が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) 
 
}

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") 
} 

行く に小さなコードを書かれているHTMLにどのように。今私は変数を送信したいtestvariableとlogin.htmlにその値と呼ばれるいくつかの文字列にしたい。

+0

どのようにリダイレクトしていますか? outputHTML == http.Redirect()?そうであれば、2つのオプションをリダイレクトします。 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/templateパッケージを使用して、値を表示するHTMLページの場所を指定する必要があります。

「アクション」 - データの評価や制御構造 - で区切られた「{{」と「}}」

次のことがないよう、あなたが​​機能をドロップする必要がありますテンプレートをレンダリングする方法がわからない場合は、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のドキュメントを参照してください。

関連する問題