我使用pyramid框架构建了一个大型Web应用程序。
此外,该应用程序允许用户在文本区域表单字段中输入文本。然后将该文本保存到数据库中,当然可以再次读出并稍后显示。
要显示我正在使用Chameleon Template Engine的内容。
这样可以正常工作,但断线不正确显示(根本不显示)。这可能是由于输入文本区域的换行在通过Chameleon显示时不会在HTML中引起新行。怎么能解决这个问题?
通过<br>
- 标签替换换行没有帮助,因为默认情况下,Chameleon会转义所有HTML标签。我知道可以停用此功能的事实,但我不想这样做以避免跨站点脚本。
答案 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))
您当然可以从中创建辅助函数。