- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我是新手,很难渲染模板。
这是我生成模板的函数:
基础.html
//Render templates for the given name, template definition and data object
func renderTemplate(w http.ResponseWriter, name string, template string, viewModel interface{}) {
// Ensure the template exists in the map.
tmpl, ok := templates[name]
if !ok {
http.Error(w, "The template does not exist.", http.StatusInternalServerError)
}
err := tmpl.ExecuteTemplate(w, template, viewModel)
if err != nil {
log.Printf("temlate error here")
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
func EditNote(w http.ResponseWriter, r *http.Request) {
//var viewModel models.EditChnl
vars := mux.Vars(r)
//ch := bson.M{"id": "Ale"}
title := vars["title"]
log.Printf("%v\n", title)
session, err := mgo.Dial("localhost")
if err != nil {
panic(err)
}
defer session.Close()
session.SetMode(mgo.Monotonic, true)
c := session.DB("tlgdb").C("chnls")
log.Printf("title is %s \n", title)
var result []models.Chnl
err = c.Find(bson.M{"title": "xxx"}).All(&result)
log.Printf("%v\n", result)
if err != nil {
log.Printf("doc not found")
log.Fatal(err)
return
}
renderTemplate(w, "edit", "base", result)
}
这里是模板:
{{define "base"}}
<html>
<head>
{{template "head" .}}
</head>
<body>
{{template "body" .}}
</body>
</html>
{{end}}
编辑.thml
{{define "head"}}<title>Edit Note</title>{{end}}
{{define "body"}}
<h1>Edit Note</h1>
<form action="/chnls/update/{{.Title}}" method="post">
<p>Title:<br> <input type="text" value="{{.Title}}" name="title"></p>
<p>Description:<br> <textarea rows="4" cols="50" name="description">{{.Description}}</textarea> </p>
<p><input type="submit" value="submit"/></p>
</form>
{{end}}
要渲染的对象是:
type Chnl struct {
Id bson.ObjectId `json:"id" bson:"_id,omitempty"`
Title string
Description string
CreatedOn time.Time
Creator string
Visits int
Score int
}
我要渲染的对象存在于 mongodb 中,我可以在控制台中打印出来:
[{ObjectIdHex("56cc4493bc54f4245cb4d36b") sometitle blabla 2016-02-23 12:37:55.972 +0100 CET blabla 0 0}]
但是我得到这个错误:
temlate error here
http: multiple response.WriteHeader calls
我想知道这里出了什么问题以及如何解决它?
最佳答案
根本问题是您将一片 Chnl
传递给模板:
var result []models.Chnl
// ...
renderTemplate(w, "edit", "base", result)
viewModel
的 renderTemplate()
参数值将是 result
。
在您的模板中,您引用点的字段,就像它是一个 Chnl
值而不是它的一部分:{{.Title}}
。所以第一次尝试解决它会失败。
记录错误很有用,因此更改您的日志记录以打印实际错误,而不仅仅是一般错误:
log.Printf("Temlate error here: %v", err)
结果是:
2016/02/24 14:57:09 Temlate error here: template: edit.html:4:30: executing "body" at <.Title>: can't evaluate field Title in type []main.Chnl
我认为您只想传递 1 个 Chnl
值而不是其中的一部分。在 EditNote()
中:
if len(result) > 0 {
renderTemplate(w, "edit", "base", result[0])
}
接下来,知道http.Error()
将内容写入响应。这意味着您不能向响应写入更多 header 值。通常当你在处理程序中调用 http.Error()
时,你应该返回而不对响应做任何事情:
if !ok {
http.Error(w, "The template does not exist.", http.StatusInternalServerError)
return // NOTE THIS RETURN
}
类似地,在所有 http.Error()
调用之后插入一个 return
。您可以做一些清理,但在 http.Error()
之后不应触及响应。
关于go - 多次 response.WriteHeader 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35603131/
res.writeHead(301, "" + "" + "" + "" + "Hola Mundo" + "" +
我们目前正在评估 New Relic,有一个跟踪元素,我不确定我是否正确理解“(WPF 客户端和 WCF 后端)” - 它通常显示“stream[some url...]writeheaders”。我
我知道response.writeHead()始终用于处理服务器响应。为什么我们必须包含它,如果我们省略它会发生什么? 例如,当使用以下代码配置服务器时,如果我省略 writeHead() 部分,代码
在 Node.JS 中运行以下代码时会产生一些错误,但我无法理解为什么 var http = require("http"), fs = require("fs"); function onReque
我试图在 golang 中使用 httptest 包。我发现了一些我不明白的东西。这是 code : package main import ( "fmt" "io/ioutil"
NewRelic stream & writeHeaders 也提出了类似的问题 我正在分析我在 New Relic 上的 WCF 服务。有一个 WCF 服务调用另一个 WCF 服务。现在我想在调用其
美好的一天, 我正在创建一个 spring 批处理,它将在文本中写入输出。 基本上输出将是 1 行标题和多行详细信息。 然后,在 xml 中,我设置了 献给我的作家。 在我的 writer java
我在中定义了一个自定义函数 custom_file.py import csv def write_dict_to_csv(columns=None, file_name=None, data=Non
我正在实现自己的 http 模块。当我阅读官方的 node.js http 模块 api 时,我无法理解一些事情: 如果用户正在使用 response.writeHead(statusCode, [r
所以我正在编写一个基本的网络应用程序,但在成功登录后无法重定向用户。代码是: t, err := template.ParseFiles("home.html") if err != nil {
我是新手,很难渲染模板。 这是我生成模板的函数: 基础.html //Render templates for the given name, template definition and data
我有一个最基本的 net/http 程序,用来学习 Go 中的命名空间: package main import ( "fmt" "log" "net/http" ) func
在我的 node.js 网页中,我正在制作类似于 Facebook 链接预览的页面预览。我正在调用以获取页面的 html,并使用它来创建预览。 $.ajax({ type: 'GET',
我正在使用以下代码使用 python 将传递给函数的字典写入 csv 文件 def addToLog(self,content): filename = "myfile.csv" fi
我用express创建了一个http服务器。下面是服务器代码: router.get('/', function(req, res, next) { // req.socket.setTimeou
我一直在尝试遵循一些 Node js 教程,但我似乎无法这样做,因为 response.writeHead 不在那里.. var http = require("http"); http.create
好的,我是 Node.js 的新手,所以请原谅菜鸟问题。这是我的简单代码: var http = require('http'); var fs = require('fs'); // simple
我想先打印出文本消息,然后在文本下方显示图像。但我收到了 http: multiple response.WriteHeader calls 错误。 我如何在一个页面中使用一个 hadler 提供图像
这几天我在研究通过websoket发送消息,使用Beego框架。但是遇到错误信息http: multiple response.WriteHeader calls问题出在哪里?任何提示都会很棒! fu
我知道 http.ResponseWriter 的 WriteHeader 方法每个 HTTP 响应只能调用一次,只能有一个响应状态代码,并且只能发送一次 header 。这一切都很好。 问题是,如果
我是一名优秀的程序员,十分优秀!