后台模板本地化

Template localization on background

我正在使用 Django-background-tasks 异步发送电子邮件。当我在视图中发送电子邮件时,本地化工作完美,但当我尝试从后台发送相同的电子邮件时,Django 渲染模板具有默认区域设置。这是我用来发送电子邮件的代码:

我从 views.py

调用的函数

tasks.py

@background()
def send_email_async(email, json):
    send_email_support_request(email, json)

email_utils.py

def send_email_support_request(email, json_data):
    c = {
        'request_id': json_data['request_id']
    }
    template = 'email_support_request.html'
    email_header = {
        'message': "All Data request",
        'subject': "Support request"
    }
    send_email(c, template, email_header, email)
    return

def send_email(context_dict, email_template_name, email_header_data, user_email):
    subject = ''.join(email_header_data['subject'].splitlines())
    email_render = loader.render_to_string(email_template_name, context_dict)
    email = EmailMessage(subject=subject,
                         body=email_render,
                         from_email=settings.EMAIL_HOST_USER,
                         to=[user_email])
    email.content_subtype = "html"
    email.send()
    return

模板文件

<!DOCTYPE html>
{% load i18n %}

<html lang="en" style="background-color: rgb(238,243,246)">

...

<span class="line-text" style="margin-bottom: 20px; display: inline-block;">
{% trans "Thank you for your request!"%}
</span>

如何根据header Accept-Language中指定的语言制作Django-rest-framework渲染模板?

我不确定这是最好的解决方案,但我正在从请求中读取区域设置,而不是将区域设置传递给函数并最终呈现模板:

with translation.override(locale):
    email_render = loader.render_to_string(email_template_name, context_dict)