gpt4 book ai didi

Mako 模板过滤器排序

转载 作者:行者123 更新时间:2023-12-04 05:16:20 25 4
gpt4 key购买 nike

在 mako 模板中输出一些 UGC( $user.text )时,我想使用 mako 过滤器 'h' 清理内容,然后添加一些 <br>标签代替换行符,所以有一些格式。

但是,mako 似乎忽略了我应用 'h' 过滤器和现在我的 <br> 的顺序。标签正在被转义而不是呈现。

这是我的 br-adding 过滤器:

<%
def nl2br(str):
return str.replace("\n", "<br/>")
%>

这是我的测试字符串:
hello,

My name is

James

以下带过滤器的 mako 标签:
${user.text | n,h,nl2br}
${user.text | n,nl2br,h}

... 使用 <br> 生成相同的 html标签逃脱:
hello,
&lt;br/&gt;
&lt;br/&gt;My name is
&lt;br/&gt;
&lt;br/&gt;James

我能找到的唯一方法是允许 <br>要通过而不转义的标签是完全删除 'h' 过滤器,如下所示:
${user.text | n,nl2br}

但这违背了对 user.text 进行 sanitizer 的目的。领域。

如何让“h”过滤器触发然后添加 <br>标签?

我错过了缓冲区的东西吗?

最佳答案

您看到的行为是由于 Markup.replace假设替换字符串是不安全的:

>>> from markupsafe import Markup, escape>>> e = escape(">x\ny")>>> eMarkup(u'&gt;x\ny')>>> e.replace("\n", "<br />")Markup(u'&gt;x&lt;br /&gt;y')

The solution is to tell markupsafe that the <br /> is trusted:

>>> e.replace("\n", Markup("<br />"))Markup(u'&gt;x<br />y')

So your nl2br filter should be:

from markupsafe import Markup
def nl2br(s):
return s.replace("\n", Markup("<br />"))

然后 ${user.text|h,nl2br}应该按预期工作。

关于Mako 模板过滤器排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14215591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com