我正在建立一個基於 web 的資料瀏覽器,名為 mavgo flight。 我希望 sqlite 中的大型表能夠連續列印,而不是僅在所有資料可用時才列印的預設行為。我嘗試按每行資料運行模板,但失敗了。
func renderHTMLTable(w http.ResponseWriter, result *sqlx.Rows) { cols, err := result.Columns() if err != nil { log.Println(err, "renderHTMLTable") return } tmpl, err := template.ParseFiles("./templates/2d.html") if err != nil { log.Println("template failed", err) return } data := HTMLTable{} data.Cols = cols for result.Next() { cols, err := result.SliceScan() if err != nil { log.Println(w, err) break } s := make([]string, len(cols)) for i, v := range cols { s[i] = fmt.Sprint(v) } tmpl.Execute(w, s) } }
我放棄了聰明,完全按照 cerise 的建議去做 增量寫入行的函數:
func renderHTMLTable(w http.ResponseWriter, result *sqlx.Rows) { cols, err := result.Columns() if err != nil { log.Println(err, "renderHTMLTable") return } head, err := template.ParseFiles("./templates/head.html") if err != nil { log.Println("template failed", err) return } row, err := template.ParseFiles("./templates/row.html") if err != nil { log.Println("template failed", err) return } foot := ` </tbody> </table> </div> </body> </html>` head.Execute(w, cols) s := make([]string, len(cols)) for result.Next() { values, err := result.SliceScan() if err != nil { log.Println(w, err) break } for i, v := range values { s[i] = fmt.Sprint(v) } row.Execute(w, s) } fmt.Fprint(w, foot)
}
以上是如何在go中增量寫入html模板的詳細內容。更多資訊請關注PHP中文網其他相關文章!