<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 7.7\. template包 template包是GO標準庫的一個部分。我們使用template將HTML存放在一個單獨的文件中,可以更改編輯頁面的布局而不用修改相關的GO代碼。 首先,我們必須將template添加到導入列表: ``` import ( "http" "io/ioutil" "os" "template" ) ``` 創建一個包含HTML表單的模板文件。打開一個名為edit.html的新文件,添加下面的行: ``` <h1>Editing {title}</h1> <form action="/save/{title}" method="POST"> <div><textarea name="body" rows="20" cols="80">{body|html}</textarea></div> <div><input type="submit" value="Save"></div> </form> ``` 修改editHandler,用模板替代硬編碼的HTML。 ``` func editHandler(w http.ResponseWriter, r *http.Request) { title := r.URL.Path[lenPath:] p, err := loadPage(title) if err != nil { p = &page{title: title} } t, _ := template.ParseFile("edit.html", nil) t.Execute(p, w) } ``` 函數template.ParseFile讀取edit.html的內容,返回*template.Template類型的數據。 方法t.Execute用p.title和p.body的值替換模板中所有的{title}和{body},并且把結果寫到http.Conn。 注意,在上面的模板中我們使用{body|html}。|html部分請求模板引擎在輸出body的值之前,先將它傳到html格式化器(formatter),轉義HTML字符(比如用&aamp;gt;替換&gt;)。 這樣做,可以阻止用戶數據破壞表單HTML。 既然我們刪除了fmt.Sprintf語句,我們可以刪除導入列表中的"fmt"。 使用模板技術,我們可以為viewHandler創建一個模板,命名為view.html。 ``` <h1>{title}</h1> <p>[<a href="/edit/{title}">edit</a>]</p> <div>{body}</div> ``` 修改viewHandler: ``` func viewHandler(w http.ResponseWriter, r *http.Request) { title := r.URL.Path[lenPath:] p, _ := loadPage(title) t, _ := template.ParseFile("view.html", nil) t.Execute(p, w) } ``` 注意,在兩個處理函數(handler)中使用了幾乎完全相同的模板處理代碼,我們可以把模板處理代碼寫成一個單獨的函數,以消除重復。 ``` func viewHandler(w http.ResponseWriter, r *http.Request) { title := r.URL.Path[lenPath:] p, _ := loadPage(title) renderTemplate(w, "view", p) } func editHandler(w http.ResponseWriter, r *http.Request) { title := r.URL.Path[lenPath:] p, err := loadPage(title) if err != nil { p = &page{title: title} } renderTemplate(w, "edit", p) } func renderTemplate(w http.ResponseWriter, tmpl string, p *page) { t, _ := template.ParseFile(tmpl+".html", nil) t.Execute(p, w) } ``` 現在,處理函數(handler)代碼更短、更加簡單。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看