3

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

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

为了显示内容,我使用了Chameleon Template Engine

这工作正常,除了换行符显示不正确(根本不显示)。这可能是因为当通过 Chameleon 显示时,输入到文本区域的换行符不会导致 HTML 中的换行符。如何解决这个问题?

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

4

2 回答 2

2

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

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

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

于 2013-02-24T11:38:46.130 回答
2

您需要将文本分成单独的行,然后使用循环和<br/>标签呈现:

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

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

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

于 2013-02-23T21:07:21.597 回答