Javascript 阻止Nunjuck转义HTML
我有一个comments AJAX调用,它返回已发布评论的数据,我还内置了@ention功能,服务器端正在处理@entions,并对所提到的用户执行Javascript 阻止Nunjuck转义HTML,javascript,template-engine,nunjucks,Javascript,Template Engine,Nunjucks,我有一个comments AJAX调用,它返回已发布评论的数据,我还内置了@ention功能,服务器端正在处理@entions,并对所提到的用户执行str_replace,在响应中用a标记替换他们的姓名,例如: { data: { comment: "<a href=\"profile/derp\">Username</a> hey what's up" } } { 数据:{ 评论:“嗨,怎么了?” } } 然而,我似乎在文档中找不到如何允许N
str_replace
,在响应中用a标记替换他们的姓名,例如:
{
data: {
comment: "<a href=\"profile/derp\">Username</a> hey what's up"
}
}
{
数据:{
评论:“嗨,怎么了?”
}
}
然而,我似乎在文档中找不到如何允许Nunjuck将其打印为实际的HTML,它将其转义并显示代码,而不是让它成为真正的a标记
有人知道我如何允许它被打印成实际的a标签吗?好的,所以在我发布这篇文章后,我几乎立刻找到了答案!对于其他人来说,这只是一个简单的问题;在打印变量的模板中添加安全过滤器,它将禁用自动转义
{{ comment.content|safe }}
虽然这意味着它很脆弱,所以一定要在服务器端添加你的保护。
你可以考虑传递评论的元数据,让模板创建HTML:
<p>
<a href="{{ comment.user.url }}">{{ comment.user.name }}</a> {{ comment.text }}
</p>
您还可以使用以下方法避免全局转义:
nunjucks.configure({ autoescape: false });
感谢您的建议,但问题是模板事先不知道是否会有链接,因为只有在有提及的情况下才会添加此链接,例如可以在注释中添加。@AndréFigueira您可以添加条件语句。尽管您几乎不想这样做。这让我很吃惊,因为当我最初看到过滤器时,我以为正好相反——保险箱可以逃出HTML。你救了我:)
nunjucks.configure({ autoescape: false });