在大量的Django tuts以及网上的任何地方,人们都会在模型类中创建如下所示的字段:
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 = models.DateTimeField(auto_now_add=True)
此外,'Created'指的是某些已在某处定义的东西?在此示例中,我没有在forms.py
中看到它,也没有在views.py
中传递。所以,无论它是什么,它只存在于这个模型中 - 或者我认为。
答案 0 :(得分:2)
我非常确定它就像你没有定义该字符串一样简单,它会被用来识别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
答案 1 :(得分:0)
需要用于翻译目的。如果你没有提供verbose_name
Django将标记字段名称,但永远无法翻译它。请参阅此处了解文档https://docs.djangoproject.com/en/1.7/topics/i18n/translation/