- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我一直在网上搜索,找不到太多关于在 golang 中发布到 html 模板和表单的信息。这是我的尝试
我的错误不能使用 "html/template".HTML("login")(键入“html/template”.HTML)作为“html/template”参数中的类型字符串".New("foo").解析
我想在 html 文件中将值传递给 {{.ErrorMessage}}
我的 HTML (login.html)
{{ define "content"}}
<h2> {{.ErrorMessage}}</h2>
form action="/login" method="POST">
Username:input type="username" name="username">
Password:input type="password" name="password">
input type="submit" value="Submit">
/form>
{{end}}
{{define "extra_head"}} <title>Title</title>{{end}}
{{define "nav"}}{{end}}
{{define "extra_footer"}}<footer>copyright@xyz.com</footer>{{end}}
{{template "_layout.html" .}}
MAIN.G0
package main
import (
"net/http"
"ere.com/handlers"
)
func main() {
http.HandleFunc("/register", handlers.RegisterHandler) // setting router rule
http.HandleFunc("/sucess", handlers.RegisterSucessHandler)
http.HandleFunc("/login", handlers.LoginHandler)
http.HandleFunc("/update", handlers.UpdateHandler)
http.HandleFunc("/logout", handlers.LogoutHandler)
http.HandleFunc("/header", handlers.HeaderHandler)
if err := http.ListenAndServe(":8181", nil); err != nil {
//log.Fatal("http.ListenAndServe: ", err)
}
}
处理程序整数
package handlers
import (
"html/template"
)
func GetTemplate(name string) *template.Template{
tmpl := template.Must(template.ParseFiles(
"frontend/templates/_layout.html",
"frontend/templates/" + name + ".html",
))
return tmpl
}
登录处理程序
type viewModel struct {
Id bson.ObjectId
Email string
Password string
FirstName string
LastName string
ErrorMessage string
}
func LoginHandler (response http.ResponseWriter, request *http.Request) {
viewModel:=viewmodels.RegisterViewModel{}
if (request.Method == "POST") {
request.ParseForm()
user := models.User{}
user.Email = request.Form.Get("username")
user.Password = request.Form.Get("password")
boolUser, userID := user.FindUserDB()
if (boolUser != true) {
viewModel.ErrorMessage = "incorrect username or password"
//need help here
t, err := template.New("foo").Parse(template.HTML("login"))
err = t.ExecuteTemplate(response, "T", viewModel)
err := GetTemplate("login").Execute(response, nil, )
if err != nil {
panic(err)
}
}else {
setSession(userID, response)
http.Redirect(response, request, "/update", 302)
}
}else {
err := GetTemplate("login").Execute(response, nil,)
if err != nil {
panic(err)
}
}
最佳答案
错误在这一行:
t, err := template.New("foo").Parse(template.HTML("login"))
template.Parse()
方法需要一个类型为 string
的参数,而您向它传递了一个类型为 template.HTML
的参数.
这个:template.HTML("login")
是一个类型转换,它将string
值"login"
转换为类型模板.HTML
。这不是必需的。只需使用:
t, err := template.New("foo").Parse("login")
虽然这不是您想要的,但您必须将模板文本传递给 Parse()
方法,而不是文件名!你很可能想调用 Template.ParseFiles()
.
事实上,因为这是下面的内容(顺便说一句,这是一个语法错误):
err := GetTemplate("login").Execute(response, nil, )
您甚至不需要出现错误的行...所以只需删除这两行:
t, err := template.New("foo").Parse(template.HTML("login"))
err = t.ExecuteTemplate(response, "T", viewModel)
看起来你想将 viewModel
作为参数传递给模板,所以在下一行这样做并删除最后一个逗号 ,
以使其编译:
err := GetTemplate("login").Execute(response, viewModel)
忠告:不要在您的处理程序中解析模板,效率非常低,而是在您的应用程序启动时解析它们,然后重用已解析的模板。阅读这个问题以获得更多解释:
关于go - 将字符串传递给golang中的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34894455/
如何使用 SPListCollection.Add(String, String, String, String, Int32, String, SPListTemplate.QuickLaunchO
我刚刚开始使用 C++ 并且对 C# 有一些经验,所以我有一些一般的编程经验。然而,似乎我马上就被击落了。我试过在谷歌上寻找,以免浪费任何人的时间,但没有结果。 int main(int argc,
这个问题已经有答案了: In Java 8 how do I transform a Map to another Map using a lambda? (8 个回答) Convert a Map>
我正在使用 node + typescript 和集成的 swagger 进行 API 调用。我 Swagger 提出以下要求 http://localhost:3033/employees/sear
我是 C++ 容器模板的新手。我收集了一些记录。每条记录都有一个唯一的名称,以及一个字段/值对列表。将按名称访问记录。字段/值对的顺序很重要。因此我设计如下: typedef string
我需要这两种方法,但j2me没有,我找到了一个replaceall();但这是 replaceall(string,string,string); 第二个方法是SringBuffer但在j2me中它没
If string is an alias of String in the .net framework为什么会发生这种情况,我应该如何解释它: type JustAString = string
我有两个列表(或字符串):一个大,另一个小。 我想检查较大的(A)是否包含小的(B)。 我的期望如下: 案例 1. B 是 A 的子集 A = [1,2,3] B = [1,2] contains(A
我有一个似乎无法解决的小问题。 这里...我有一个像这样创建的输入... var input = $(''); 如果我这样做......一切都很好 $(this).append(input); 如果我
我有以下代码片段 string[] lines = objects.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.No
这可能真的很简单,但我已经坚持了一段时间了。 我正在尝试输出一个字符串,然后输出一个带有两位小数的 double ,后跟另一个字符串,这是我的代码。 System.out.printf("成本:%.2
以下是 Cloud Firestore 列表查询中的示例之一 citiesRef.where("state", ">=", "CA").where("state", "= 字符串,我们在Stack O
我正在尝试检查一个字符串是否包含在另一个字符串中。后面的代码非常简单。我怎样才能在 jquery 中做到这一点? function deleteRow(locName, locID) { if
这个问题在这里已经有了答案: How to implement big int in C++ (14 个答案) 关闭 9 年前。 我有 2 个字符串,都只包含数字。这些数字大于 uint64_t 的
我有一个带有自定义转换器的 Dozer 映射: com.xyz.Customer com.xyz.CustomerDAO customerName
这个问题在这里已经有了答案: How do I compare strings in Java? (23 个回答) 关闭 6 年前。 我想了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是
我已阅读 this问题和其他一些问题。但它们与我的问题有些无关 对于 UILabel 如果你不指定 ? 或 ! 你会得到这样的错误: @IBOutlet property has non-option
这两种方法中哪一种在理论上更快,为什么? (指向字符串的指针必须是常量。) destination[count] 和 *destination++ 之间的确切区别是什么? destination[co
This question already has answers here: Closed 11 years ago. Possible Duplicates: Is String.Format a
我有一个Stream一个文件的,现在我想将相同的单词组合成 Map这很重要,这个词在 Stream 中出现的频率. 我知道我必须使用 collect(Collectors.groupingBy(..)
我是一名优秀的程序员,十分优秀!