后台模板本地化
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)
我正在使用 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)