gpt4 book ai didi

django - 将包含变量的惰性翻译字符串传递给 Django 中的函数

转载 作者:行者123 更新时间:2023-12-02 08:54:23 24 4
gpt4 key购买 nike

在 Django View 中,我创建一个这样的主题:

subject = _(u"%(user)s has posted a comment") % { 'user': user }

然后我将此主题传递给一个处理电子邮件通知的函数:

send_notifications(request, subject, url)

在 send_notifications 中,我迭代所有订阅并发送电子邮件。然而,每个用户可以有不同的语言,所以我通过 Django 的 activate 动态激活用户的语言:

def send_notifications(request, subject, url):
from django.utils.translation import activate
for s in Subscription.objects.filter(url=url):
activate(s.user.userprofile.lang)
send_mail(subject, render_to_string('notification_email.txt', locals()), settings.SERVER_EMAIL, [s.user.email])

模板以每个用户的正确语言呈现。但是,主题作为评估和翻译的字符串传递给 send_notifications,因此不会被翻译。

我尝试使用惰性翻译和 lambda 函数作为参数,但没有成功。任何帮助表示赞赏:)

最佳答案

不要传递翻译的主题,而是传递未翻译的主题:

subject = '%(user)s has posted a comment'
context = {'user': user}

def send_notifications(request, subject, url, context):
from django.utils.translation import activate
for s in Subscription.objects.filter(url=url):
activate(s.user.userprofile.lang)
send_mail(_(subject) % context, render_to_string('notification_email.txt', locals()), settings.SERVER_EMAIL, [s.user.email])

如果您不打算个性化每个用户的内容,那么您不妨限制渲染数量,因为这有点令人困惑:

# also do your imports at the top to catch import issues early
from django.utils.translation import activate
from django.utils.translation import ugettext as _

def send_notifications(request, url,
translatable_subject, context,
body_template='notification_template.txt'):
previous_lang = None
for s in Subscription.objects.filter(url=url).order_by('user__userprofile__lang'):
if s.user.userprofile.lang != previous_lang:
activate(s.user.userprofile.lang)
subject = _(translatable_subject) % context
body = render_to_string(body_template, locals())
send_mail(subject, body, settings.SERVER_EMAIL, [s.user.email])
previous_lang = s.user.userprofile.lang

因此,很明显您不会每次使用都呈现电子邮件。

这个轻微的重写应该会让您对最初选择的几个名称(locals、notification_template)产生怀疑。

上面的示例代码几乎不是“有根据的猜测”,您应该仔细检查它并确保您在粘贴之前理解所有内容。

关于django - 将包含变量的惰性翻译字符串传递给 Django 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9607051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com