Line Breaking in Chameleon

巧了我就是萌 提交于 2020-01-04 05:11:31

问题


I have used the pyramid framework to build a large web application.

Among other things, this application allows the user to enter text into a text area form field. This text is then saved to a database and of course can be readout again and displayed later.

To display content I am using the Chameleon Template Engine.

This works fine, except that line breaking is not displayed correctly (not displayed at all). This is probably due to the fact that the newlines entered into the text area do not cause a new line in HTML when displayed through Chameleon. How can one fix this?

It does not help to replace the newlines by <br>-Tags because by default Chameleon escapes all HTML-Tags. I am aware of the fact that one can deactivate this feature, but I do not want to do that to avoid cross-site scripting.


回答1:


You need to break the text into separate lines, then render this using a loop and <br/> tags:

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

This uses the str.splitlines() method to split the text on newlines, then the loop adds a <br /> break tag after each line of the text.

You are quite right not doing this in the view, then forcing Chameleon to accept your inserted <br /> tags by setting the structure: flag. Luckily there is absolutely no need for that anyway.




回答2:


Another possibility is to do something like the following:

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

You can of course create a helper function from it.



来源:https://stackoverflow.com/questions/15044331/line-breaking-in-chameleon

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!