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.