23

我有一个评论 AJAX 调用,它返回已发布评论的数据,我还内置了 @mention 功能,服务器端正在处理 @mentions 并对str_replace提到的用户执行 a 在响应中用 a 标签替换他们的名字,对于例子:

{
   data: {
      comment: "<a href=\"profile/derp\">Username</a> hey what's up"
   }
}

但是,我似乎无法在文档中找到如何允许 nunjucks 将其打印为实际的 HTML,它会对其进行转义并显示代码,而不是让它成为真正的标签。

有谁知道我如何允许将其打印为实际的标签?

4

3 回答 3

71

好的,所以在我发布这个之后我几乎立即找到了答案!对于其他人来说,这就是这个;在您打印变量的模板中添加安全过滤器,这将禁用自动转义。

{{ comment.content|safe }}

虽然这意味着它容易受到XSS 注入的攻击,但请确保在服务器端添加保护。

于 2015-04-25T13:54:26.257 回答
11

您还可以使用以下方法避免全局转义:

nunjucks.configure({ autoescape: false });
于 2016-04-18T14:18:58.197 回答
5

您可以考虑传递评论的元数据并让模板创建 HTML:

<p>
  <a href="{{ comment.user.url }}">{{ comment.user.name }}</a> {{ comment.text }}
</p>

然后传递以下元数据:

comment: {
  user: { url: "profile/derp", name: "Username" },
  text: "hey what's up"
}
于 2015-05-28T05:38:57.727 回答