Rip*_*pul 2 html forms go go-templates
我使用go语言使用go-template提交HTML表单.得到一些奇怪的结果.
基本思想是我有一个名为Page的数据结构,其中包含一些元素.模板中填充了一系列Pages.在模板内部,我遍历每个页面并显示其内容.这些内容中的每一个都嵌入在HTML表单中,并带有相应的链接.点击链接后,它将提交相应的表单.
代码段如下:
{{range $index, $element := .Pages}}
<form action="/detailNews" id="readMore{{$index}}" method="post" name="readMore{{$index}}">
//displaying elements from each page
<div id="more">
<input name="query" type="hidden" value="{{printf "%s" .Title}}">
<a href="#" onclick="document.readMore{{$index}}.submit()">Read More</a>
</div>
</form>
{{end}}
Run Code Online (Sandbox Code Playgroud)
代码主要适用于一个小问题.id和name属性按预期生成输出,例如:readMore0,readMore1等.
问题出现在"a"标签上,其中onclick属性填充为:document.readMore 0 .submit(),document.readMore 1 .submit()等.注意0,1附近的空间.这样,单击链接时未找到相应的表单.
我无法弄清楚这个的原因.
任何帮助将受到高度赞赏.
谢谢,Ripul
这是因为逃避上下文而发生的.
默认情况下,此包假定所有管道都生成纯文本字符串.它添加了必要的转义管道阶段,以便在正确的上下文中正确安全地嵌入纯文本字符串.
如果数据值不是纯文本,则可以通过使用其类型标记数据值来确保它不会过度转义.
来自content.go的HTML,JS,URL和其他类型可以携带免于转义的安全内容.
为了克服它,您应该将页面索引作为.Pages键入的元素结构的一部分传递template.JS.像这样的东西:
type Page struct {
Id template.JS
Title string
}
Run Code Online (Sandbox Code Playgroud)