eag*_*arn 15 django django-models django-views
这是一个非常基本的问题.我试图谷歌找到我能用简单语言理解的答案.但这没有帮助.我遇到了下面的代码片段,Django's UserCreationForm然后才知道ugettext_lazy _存在的东西.我不知道,如果它是django specific module/function,它的目的是什么以及为什么要使用它.
SO中有这篇文章,对此有更多的讨论.但我想先了解基本面.请赐教!
from django.utils.translation import ugettext, ugettext_lazy as _
///// what is the _ means here and why is it used
class UserCreationForm(forms.ModelForm):
"""
A form that creates a user, with no privileges, from the given username and
password.
"""
error_messages = {
'duplicate_username': _("A user with that username already exists."),
'password_mismatch': _("The two password fields didn't match."),
}
Run Code Online (Sandbox Code Playgroud)
小智 12
ugettext是可翻译字符串的unicode版本.
ugettext_lazy是一个"懒惰"的版本.懒惰的字符串是Django-ism; 它们是类似字符串的对象,直到真正的字符串直到最后一刻才会转动.通常,您不知道如何将字符串翻译到该过程的后期.我不知道浏览器使用什么语言,直到我可以查看他们的请求,所以我希望翻译字符串是"懒惰的",并且不要评估,直到它绝对需要在模板中呈现,例如.
出于您的目的,这意味着它们将显示为字符串 - 但这也意味着它们可能会被翻译覆盖.因此,例如,您可以将duplicate-username消息更改为_("抱歉,但存在具有该名称的用户.请再试一次").对于讲英语的浏览器,他们会看到您的新消息.如果这个字符串已经注册了翻译,那么你就会破坏它 - 现在查找西班牙语版本会失败,因为它找不到与你的西班牙语匹配的字符串.
对于95%的网站,这没关系,因为您不会提供您网站的翻译版本.如果是,请阅读https://docs.djangoproject.com/en/dev/topics/i18n/.