模型内部 ugettext 的用途
Purpose of ugettext inside of Models
在大量的 Django tuts 和网上的任何地方,人们都会在模型中创建如下所示的字段 class:
from django.db import models
from django.utils.translation import ugettext as _
class MyModel(models.Model)
created = models.DateTimeField(
_('Created'),
auto_now_add=True
)
我明白 ugettext
在做什么,但我不明白为什么它被应用到这个例子中,'Created'。为什么不直接写:
created = models.DateTimeField(auto_now_add=True)
此外,'Created' 是指在某处定义的东西吗?在此示例中,我没有看到它存在于 forms.py
中,也没有看到它在 views.py
中通过。所以,不管它是什么,它只存在于这个模型中——或者我认为是这样。
我相当确定它就像您不定义该字符串一样简单,它将用于标识 ModelForm
中的字段。如果您随后在您的网站上使用各种语言,该字段将不会有与之关联的翻译字符串。
因此您可以在 forms.py
;
中轻松定义表单
from django import forms
from .models import MyModel
class MyForm(forms.ModelForm):
"""
MyForm is a nice a simple ModelForm using
labels from MyModel.
"""
class Meta:
model = MyModel
fields = ['created', ]
# views.py
from django.views.generic.edit import CreateView
from django.core.urlresolvers import reverse_lazy
from .forms import MyForm
class MyObjCreate(CreateView):
form_class = MyForm
通过添加 ugettext
字符串,它将被拉入消息目录,然后可以进行翻译。至少根据我的翻译经验,这是有道理的。
查看文档,尤其是关于模型 class Meta
的文档;
https://docs.djangoproject.com/en/1.7/topics/i18n/translation/#model-verbose-names-values
翻译需要它。如果你不提供 verbose_name
Django 将标记字段名称,但永远无法翻译它。请在此处查看文档 https://docs.djangoproject.com/en/1.7/topics/i18n/translation/
在大量的 Django tuts 和网上的任何地方,人们都会在模型中创建如下所示的字段 class:
from django.db import models
from django.utils.translation import ugettext as _
class MyModel(models.Model)
created = models.DateTimeField(
_('Created'),
auto_now_add=True
)
我明白 ugettext
在做什么,但我不明白为什么它被应用到这个例子中,'Created'。为什么不直接写:
created = models.DateTimeField(auto_now_add=True)
此外,'Created' 是指在某处定义的东西吗?在此示例中,我没有看到它存在于 forms.py
中,也没有看到它在 views.py
中通过。所以,不管它是什么,它只存在于这个模型中——或者我认为是这样。
我相当确定它就像您不定义该字符串一样简单,它将用于标识 ModelForm
中的字段。如果您随后在您的网站上使用各种语言,该字段将不会有与之关联的翻译字符串。
因此您可以在 forms.py
;
from django import forms
from .models import MyModel
class MyForm(forms.ModelForm):
"""
MyForm is a nice a simple ModelForm using
labels from MyModel.
"""
class Meta:
model = MyModel
fields = ['created', ]
# views.py
from django.views.generic.edit import CreateView
from django.core.urlresolvers import reverse_lazy
from .forms import MyForm
class MyObjCreate(CreateView):
form_class = MyForm
通过添加 ugettext
字符串,它将被拉入消息目录,然后可以进行翻译。至少根据我的翻译经验,这是有道理的。
查看文档,尤其是关于模型 class Meta
的文档;
https://docs.djangoproject.com/en/1.7/topics/i18n/translation/#model-verbose-names-values
翻译需要它。如果你不提供 verbose_name
Django 将标记字段名称,但永远无法翻译它。请在此处查看文档 https://docs.djangoproject.com/en/1.7/topics/i18n/translation/