【问题标题】:Line breaks are ignored when render text in html template在 html 模板中呈现文本时忽略换行符
【发布时间】:2018-04-18 15:08:22
【问题描述】:

我正在开发一个网站,具有特定角色的用户可以登录该网站并向邮件列表发送电子邮件。我正在使用 Flask、Python 并使用 Mailgun 来传递电子邮件。我正在使用 HTML 模板,电子邮件文本作为参数从视图函数传递到发送电子邮件函数。问题是发送电子邮件文本时忽略了换行符。如果电子邮件文本是:

Line 1
Line 2
Line 3

它将被交付为:

Line 1 Line 2 Line 3

我的视图函数是:

@main.route('/send-email-to-mailinglist', methods=['POST', 'GET'])
def send_email_to_mailinglist():
    form = MailToMailingList()
    if form.validate_on_submit():
        form.subject = form.subject.data
        form.email_text = form.email_text.data
        send_email('mailing_list@mydomain.com', 
                    form.subject, 'auth/email/to_mailing_list', 
                    description = "now",
                    sender='info', text = form.email_text)
        return redirect(url_for('.index'))
    return render_template ('send_email_to_all.html', form=form)

我的发送邮件功能是:

def send_email(to, subject, template, **kwargs):  
    app = current_app._get_current_object()
    auth = ('api', app.config['MAILGUN_API_KEY'])
    url = 'https://api.mailgun.net/v3/{}/messages'.format(app.config['MAILGUN_DOMAIN']) 
    data = {
        'from': '<{}@{}>'.format(kwargs['sender'],app.config['MAILGUN_DOMAIN']),
        'to': to,
        'subject': subject,    
        'text': render_template(template + '.txt', **kwargs),
        'html': render_template(template + '.html', **kwargs)
    }
    response = requests.post(url, auth=auth, data=data)
    response.raise_for_status()

而HTML模板的相关部分是:

<!doctype html>
<html>
  <head>
    <meta name="viewport" content="width=device-width">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <style>
    </style>
  </head>
  <body>
..
..
    <p> {{ text }} </p>
..
..
  </body>
</html>

【问题讨论】:

    标签: html python-3.x flask outlook mailgun


    【解决方案1】:

    您的问题可能是 render_template 需要 HTML,因此将换行符减少为空格,这是处理 HTML 中的换行符和多个空格的常见行为,请参阅this answer

    有关如何解决此问题,请参阅this answer。当然,您也可以手动插入&lt;br /&gt; 标签,或者使用为您处理空格到标签转换的编辑器,例如CKEditorTinyMCE

    【讨论】:

    • 谢谢。有用。我使用内联 css 所以我的代码被转换为:&lt;p style="white-space: pre-wrap;"&gt; {{ text }} &lt;/p&gt;
    • 我已经做了更多的试验,但它不适用于Outlook
    • 我能够让它为 Outlook 工作。我使用标签&lt;pre&gt;。在这个链接link 上它说:“原则上,P 标记不允许在 PRE 元素中,但是,HTML 2.0 规范鼓励浏览器接受它,备注 PRE 元素中的 P 应该只产生一个换行符,而不是一个换行符加一个空行。”。根据此信息,我将代码更改如下:&lt;pre&gt; &lt;p style="font-family: sans-serif; font-size: 14px;"&gt; {{ text }} &lt;/p&gt; &lt;/pre&gt;
    猜你喜欢
    • 1970-01-01
    • 2018-11-03
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 2012-01-28
    • 2022-06-28
    • 2019-12-22
    相关资源
    最近更新 更多