变色龙断线



我使用金字塔框架构建了一个大型web应用程序。

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

为了显示内容,我正在使用变色龙模板引擎。

除了换行未正确显示(根本未显示(之外,此操作效果良好。这可能是因为当通过Chameleon显示时,输入到文本区域的换行符不会导致HTML中的换行符。如何解决这个问题?

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

您需要将文本分解为单独的行,然后使用循环和<br/>标记进行渲染:

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

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

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

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

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

当然,您可以从中创建一个助手函数。

最新更新