【问题标题】:Will \n in jinja2 templates create a problem?jinja2 模板中的 \n 会产生问题吗?
【发布时间】:2020-03-24 23:00:59
【问题描述】:

我正在使用 jinja2 模板创建一个表。当我开始在一行中编写所有 html 代码时,它会破坏通过电子邮件发送的表格。

所以我在写

table_row = '<tr>\
                    <td>{{dev}}</td>\
                    <td>{{pr_count}}</td>\
                </tr>'
table_row_template = jinja2.Template(table_row)

在一个大循环中,我开始使用行模板将数据附加到表中。

for developer in developer_json:
     dev_count_list = dev_count_list\
                     + table_row_template.render(dev = dev_count[0], pr_count = dev_count[1]) + '\n'

最后,当我在基本模板中使用 dev_count_list 进行渲染时,一切正常。

我的问题 - \n 是如何被 jinja2 模板解释的。它会添加一个新行还是只是再次写入\n

【问题讨论】:

  • 看不到最终的输出代码吗?你能在这里放一个相关的部分吗?
  • 要查看最终输出代码,我需要使用 print 或 app.logger 在写入输出流时肯定会将 '\n' 解析为新行。我想知道 jinja 如何渲染到输出流,即 html。我的假设也正确吗?单行html对html代码长度有限制吗?

标签: python html jinja2 html-email


【解决方案1】:

考虑这个最小的例子:

t = Template("Hello \n{{ something }}!")
output = t.render(something="World")
print(output)
for b in bytearray(output, 'ascii'):
    print(b, chr(b))

这会逐字节生成渲染的字符串:

Hello 
World!
72 H
101 e
108 l
108 l
111 o
32  
10 

87 W
111 o
114 r
108 l
100 d
33 !

如您所见,\n 字符(LF,十进制 10)在渲染输出字符串时被保留。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-27
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多