关于创建Django模型时某些语法的快速问题。如果您看一下下面的示例models.py文件,您会看到四个字段中的每个字段都包含一个重复的字段名,因为括号中的字符串在下划线之前。我认为这是某种形式的可视化表示形式,但是在admin中似乎自动发生,没有_('field name')。
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email address'), unique=True)
first_name = models.CharField(_('first name'), max_length=30, blank=True)
last_name = models.CharField(_('last name'), max_length=30, blank=True)
date_joined = models.DateTimeField(_('date joined'), auto_now_add=True)
答案 0 :(得分:0)
所有内置字段类型都继承自Field class。如果查看该类的__init__()
调用,您会看到函数中的第一个参数是verbose_name
参数。这样就告诉我们这些字符串映射到什么。
_('some text')
构造是进行国际化的相当普遍的语法(也称为 i18n )。我已经在其他语言(例如PHP)中看到了这种语法。这样就可以在翻译代码时以各种语言显示详细名称。如您在上面的注释中所指出的,函数ugettext_lazy
作为别名_
被导入。这样,程序员(所有人都很懒惰)可以在需要翻译文本的每个位置键入_('some text')
而不是ugettext_lazy('some text')
。由于一个应用程序中可能有数百(或数千)个硬编码字符串,因此从长远来看,它可以节省程序员大量的时间。
这是一个丑陋的骇客,但可以完成工作。我特别不喜欢Python,因为它会覆盖有时有用的_
名称,当您想丢掉一个值时,该名称通常用作占位符变量名称。