当前位置: 首页 > 面试题库 >

去template.ExecuteTemplate包括html

朱渝
2023-03-14
问题内容

我已按照本教程进行操作:http :
//golang.org/doc/articles/wiki/final.go,并根据我的需要/想要对其进行了略微修改。问题是我想在模板中支持HTML。我意识到这是安全隐患,但目前尚无问题。

页面渲染的结果:

<h1>this<strong>is</strong>a test</h1>

让我解释一下代码:

type Page struct {
    Title string
    Body  []byte
}

我想要的HTML数据存储在中Page.Body。这是类型[]byte,表示我无法(或可以吗?)运行html/template.HTML(Page.Body)该函数需要一个字符串。

我有这个预渲染模板:

var (
    templates = template.Must(template.ParseFiles("tmpl/edit.html", "tmpl/view.html"))
)

实际的ExecuteTemplate样子是这样的:

err := templates.ExecuteTemplate(w, tmpl+".html", p)

其中w是w http.ResponseWriter,tmpl是tmpl string,p是p *Page

最后,我的'view.html'(模板)如下所示:

<h1>{{.Title}}</h1>
<p>[<a href="/edit/{{.Title}}">edit</a>]</p>
<div>{{printf "%s" .Body}}</div>

我尝试过的事情:

  • {{printf "%s" .Body | html}} 什么也没做
  • 我已经包括了github.com/russross/blackfridayMarkdown处理器,并运行了p.Body = blackfriday.MarkdownCommon(p.Body)将Markdown正确转换为HTML的运行,但是HTML仍作为实体输出。
  • 编辑: 我已经尝试了以下代码(我不知道为什么格式被弄乱了),它仍然输出完全相同的代码。

var s template.HTML s = template.HTML(p.Body) p.Body = []byte(s)

任何指导,不胜感激。如果我感到困惑,请询问,然后我可以修改我的问题。


问题答案:

将您的[]byte或转换string为类型template.HTML(在此处记录)

p.Body = template.HTML(s) // where s is a string or []byte

然后,在您的模板中,只需:

{{.Body}}

它将被打印而不会逃脱。

编辑

为了能够在页面正文中包含HTML,您需要更改Page类型声明:

type Page struct {
    Title string
    Body  template.HTML
}

然后分配给它。



 类似资料:
  • rank ▲ ✰ vote url 72 349 49 512 url 怎么样去除空格(包括tab)? 有什么函数既可以去掉空格也能去掉tab? 在两侧的空白: s = " \t a string example\t " s = s.strip() 右边的空白: s = s.rstrip() 左边的空白: s = s.lstrip() 也可以指定字符来去除: s = s.strip('

  • HTML不支持在HTML页面中嵌入HTML页面。 要实现此功能,我们可以使用以下选项之一 - Using Ajax - 进行服务器调用以获取相应的HTML页面并将其设置在HTML控件的innerHTML中。 Using Server Side Includes - JSP,PHP和其他Web端服务器技术可以在动态页面中包含HTML页面。 使用AngularJS,我们可以使用ng-include指令

  • 我有这个BST的问题,我想在Java解决,但我不知道为什么它不起作用。问题就在这里: > 二叉搜索树(BST)是一种二叉树,其中每个节点的值大于或等于该节点左子树中所有节点的值,而小于该节点右子树中所有节点的值。 编写一个函数,检查给定的二叉搜索树是否包含给定的值。 例如,对于以下树: n1(值:1,left:null,right:null)n2(值:2,left:n1,right:n3)n3(值

  • 问题内容: 情况: Go程序包 A 由3个文件组成,每个文件中我都使用另一个程序包 B 中的函数。我必须在每个文件的开头导入包 B。 题: 程序包 B 实际上是初始化3次还是仅初始化1次? 问题答案: 简短答案:初始化仅执行一次。 长答案:引用相关的规范部分- 程序执行: 通过为所有包级变量分配初始值,然后使用名称和签名调用任何包级函数来初始化不导入的包 在其来源中定义。名称为package-sc

  • 我正试图在Mac OS X El Capitan上使用创建一个虚拟环境。我已经用安装了Python 2.7.11,默认情况下包括、和。 然而,当我尝试安装以下说明在留档或从任何其他资源,我得到几个问题: 完成其工作后,可执行文件未放置在中,因此我需要手动它(这可能表明此步骤的安装有问题) 运行后,它会创建新的环境,从-安装中捕获Python 2.7.11,但是:文件夹中没有。这意味着,如果我尝试,

  • 问题内容: 在1.6.0_16 JDK上工作时,我使用Apache CXF 2.5.2从WSDL生成了存根类,Apache CXF 2.5.2使用了最新的jaxb- api 2.2。我知道可以使用jaxb-api 2.1,但是为了避免兼容性问题,我宁愿使用当前版本。由于我的JDK具有jaxb 2.1,因此构建失败并显示以下消息: 因此,我尝试使用以下依赖项使Maven包括最新的jaxb api和i