javascript - 模板继承问题:一个模板覆盖另一个
问题描述
我有两个 HTML 模板(login.html、signup.html),它们都继承了(base.html)文件,问题是这两个文件之一覆盖了另一个文件的标题和内容。这意味着当我转到 /login/ 时,我看到了登录内容,但是当我转到 /signup/ 时,我再次看到了登录内容!当我停止(login.html)扩展 base.html 时,/signup/ 会显示注册页面的内容。
我还是 Go 新手,正在构建一个待办事项应用程序,那么我在这里做错了什么?
base.html:
{{define "base"}}
<!DOCTYPE html>
...
<title>{{template "title"}}</title>
...
{{template "main" .}}
...
{{end}}
登录.html:
{{template "base" .}}
{{define "title"}}Login{{end}}
{{define "main"}}
Login Now!
{{end}}
到这里一切正常
现在当我开始添加更多模板时:
signup.html
{{template "base" .}}
{{define "title"}}Sign Up{{end}}
{{define "main"}}
Login or miss who you love >:(
{{end}}
更新:我的 Go 代码
main.go(负责路由和可重用功能):包主
import (
"html/template"
"log"
"net/http"
"github.com/julienschmidt/httprouter"
)
var templates = template.Must(template.ParseFiles("tmpl/base.html", "tmpl/index.html", "tmpl/signup.html", "tmpl/login.html"))
func renderTemplate(w http.ResponseWriter, r *http.Request, tmpl string, data interface{}) {
err := templates.ExecuteTemplate(w, tmpl+".html", data)
if err != nil {
http.NotFound(w, r)
return
}
}
func main() {
r := httprouter.New()
r.GET("/signup/", signupHandler)
r.POST("/createUser/", createUserHandler)
r.GET("/login/", loginHandler)
log.Fatal(http.ListenAndServe(":8080", r))
}
auth.go(包含用于身份验证的处理程序)
package main
import (
"net/http"
"github.com/julienschmidt/httprouter"
)
func signupHandler(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
renderTemplate(w, r, "signup", nil)
}
// Logins
func loginHandler(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
renderTemplate(w, r, "login", nil)
return
}
//===================================================
//===================================================
//===================================================
//===================================================
//===================================================
创建用户的数据库代码(不确定这是否相关)
//===================================================
//===================================================
//===================================================
//===================================================
func createUserHandler(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
if r.FormValue("password1") != r.FormValue("password2") {
http.Redirect(w, r, "/signup/", http.StatusFound)
return
}
db := connectDB(w, "TodoWoo")
defer db.Close()
q := `INSERT INTO users(username, password) VALUES (?, ?)`
if _, err := db.Exec(q, r.FormValue("username"), r.FormValue("password1")); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
http.Redirect(w, r, "/login/", http.StatusFound)
}
func loginUserHandler(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
}
driver.go(连接数据库,不确定这是否相关
package main
import (
"database/sql"
"fmt"
"net/http"
_ "github.com/go-sql-driver/mysql"
)
// Don't forgot to defer db.Close()
func connectDB(w http.ResponseWriter, scm string) *sql.DB {
db, err := sql.Open("mysql", fmt.Sprintf("root:My44200444Sql@(127.0.0.1:3306)/%s?parseTime=true", scm))
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
return db
}
解决方案
你可以这样做:
base.html
{{define "base_header"}}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{ . }}</title>
</head>
<body>
{{end}}
{{define "base_footer"}}
</body>
</html>
{{end}}
login.html
{{ $page_title := "Login" }}
{{ $page_footer := "login footer text" }}
{{ template "base_header" $page_title }}
Login Now!
{{ template "base_footer" $page_footer }}
signup.html
{{ $page_title := "Sign Up" }}
{{ $page_footer := "signup footer text" }}
{{ template "base_header" $page_title }}
Login or miss who you love >:(
{{ template "base_footer" $page_footer }}
推荐阅读
- java - 在 Android 应用程序中使用锁和条件时出现 IllegalMonitorStateException
- angular - 返回时类型“typeof Observable”上不存在属性“of”
- python - Pyinstaller 无法生成 .exe 文件
- json - 解组 JSON 并区分缺失键和空值
- python - 为什么我在 python 实现的算法中出现逻辑错误
- python-3.x - 将一列插入另一列的数据框配对值
- laravel - 为什么 laravel 点火错误页面永远无法正确获取错误行号?
- html - 如何在不与下一个内容混合的情况下将 div 向右浮动?
- python-3.x - Python 中的神秘列表对象表示 [...]
- python-3.x - Selenium python迭代多个元素