golang 模板中的 HTML 表单提交

标签 html forms go go-templates

我正在使用 go 语言通过 go-template 提交 HTML 表单。得到一些奇怪的结果。

基本思想是我有一个名为 Page 的数据结构,其中包含一些元素。该模板填充了一组页面。在模板中,我遍历每个页面并显示其内容。这些内容中的每一个都嵌入到一个 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}}

该代码主要适用于一个小问题。 id 和 name 属性按预期生成输出,例如:readMore0readMore1 等。

问题出在 onclick 属性填充为以下内容的“a”标记处:document.readMore 0 .submit()document.readMore 1 .submit() 等。请注意 0、1 周围的 空格。这样,单击链接时将找不到相应的表单。

我想不通这是什么原因。

我们将不胜感激任何帮助。

谢谢, 里普尔

最佳答案

发生这种情况是因为 escaping contexts .

By default, this package assumes that all pipelines produce a plain text string. It adds escaping pipeline stages necessary to correctly and safely embed that plain text string in the appropriate context.

When a data value is not plain text, you can make sure it is not over-escaped by marking it with its type.

Types HTML, JS, URL, and others from content.go can carry safe content that is exempted from escaping.

为了克服它,您应该将页面索引作为类型为 template.JS.Pages 元素结构的一部分传递。 .像这样:

type Page struct {
         Id    template.JS
         Title string
}

关于golang 模板中的 HTML 表单提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25685797/

相关文章:

javascript - 防止按钮表单提交Javascript

javascript - 根据状态 react 重置选择选项

forms - 有没有办法在 CakePHP 日期表单输入中设置默认日期?

HTML 表单输入标题样式

map - 尝试在 Go 中实现 map 合并功能但失败

RegExp 匹配所有直到两个连续的特殊字符 (]])

html - 选中 radio 时显示元素

javascript - Jquery 不将 html 传递到 iframe

go - 通过 Jenkins 工具安装 go-1.17 时输入格式错误或输入包含不可映射的字符

html - 根据上述部分的可见性向下移动 div