在变色龙的线断裂

时间:2013-02-23 18:58:26

标签: python pyramid chameleon template-tal zpt

我使用pyramid框架构建了一个大型Web应用程序。

此外,该应用程序允许用户在文本区域表单字段中输入文本。然后将该文本保存到数据库中,当然可以再次读出并稍后显示。

要显示我正在使用Chameleon Template Engine的内容。

这样可以正常工作,但断线不正确显示(根本不显示)。这可能是由于输入文本区域的换行在通过Chameleon显示时不会在HTML中引起新行。怎么能解决这个问题?

通过<br> - 标签替换换行没有帮助,因为默认情况下,Chameleon会转义所有HTML标签。我知道可以停用此功能的事实,但我不想这样做以避免跨站点脚本。

2 个答案:

答案 0 :(得分:2)

您需要将文本分成不同的行,然后使用循环和<br/>标记对其进行渲染:

<span tal:omit-tag="" 
      tal:repeat="line text_with_newlines.splitlines()">
  ${line}<br />
</span>

这使用str.splitlines() method在换行符上拆分文本,然后循环在文本的每一行之后添加<br />符号标记。

您在视图中不这样做是正确的,然后通过设置<br />标志强制Chameleon接受您插入的structure:标记。幸运的是,无论如何都绝对没有必要。

答案 1 :(得分:2)

另一种可能性是执行以下操作:

import webhelpers.html.tags as t
s = t.literal(t.BR).join(s.split(t.NL))

您当然可以从中创建辅助函数。