如何从主函数向Jinja传递换行符\n或<br>以正确渲染列表
解决方法
推荐方案:直接在模板中循环生成列表
别在后端拼字符串了,模板引擎本来就是干这个的。以常用的Jinja2模板为例,直接把colors列表传给模板,然后在模板里写:
<ol start="0"> {% for color in colors %} <li>{{ color }}</li> {% endfor %} </ol>
后端只需要传递原始的colors列表,模板会自动渲染成从0开始的有序列表,既简洁又不容易出错。
备选方案:如果必须用字符串变量传递
如果因为某些限制一定要用colors_out变量,得做两件事:
- 后端直接拼接完整的HTML列表代码:
colors = ["red", "green", "blue"] colors_out = "<ol start='0'>" for color in colors: colors_out += f"<li>{color}</li>" colors_out += "</ol>"
- 在模板中告诉引擎这段内容是安全的HTML,不需要转义:
{{ colors_out|safe }}
为什么之前的方法失效?
- 用
\n换行:HTML里的普通文本换行默认会被浏览器解析成空格,只有在<pre>标签里才会保留换行格式,但你要的是有序列表,不是预格式化文本。 - 用
<br>但显示成<br>:这是因为模板引擎默认会转义HTML特殊字符来防止XSS攻击,必须用safe过滤器关闭转义,才能让浏览器正确解析标签(不过更推荐直接拼完整的列表标签,而非用<br>模拟列表)。
内容的提问来源于stack exchange,提问作者Nguyen Tran
相关产品推荐
相关产品推荐

