Поле модели Django содержит странный атрибут _("частный")
В настоящее время я изучаю Django и во время чтения натолкнулся на приведенный ниже блок кода, который я не понимаю.
private = models.BooleanField(
_('private'),
default=False,
help_text=_('theme is available ONLY for the site.'),
)
Вышеприведенная строка кода содержит
_('private')
и я не могу понять, что он делает. Я знаю об использовании
_
для материалов, связанных с переводом. Почему имя атрибута не объявлено для
_("private")
?
Я пытался найти ответ в Интернете, но не смог.
Благодарю.
2 ответа
Как вы можете видеть в исходном коде Django, конструктор
Field
(который
BooleanField
наследует) берет
verbose_name
как первый позиционный аргумент. Итак, ваш первый аргумент (_('private')
) будут затронуты
verbose_name
.
Однако, чтобы сделать ваш код более понятным, я бы рекомендовал передать его как аргумент ключевого слова:
private = models.BooleanField(
verbose_name=_('private'),
default=False,
help_text=_('theme is available ONLY for the site.'),
)
Использование аргумента ключевого слова для
verbose_name
сделает его более понятным для вас и людей, читающих ваш код, тем более что в документации Django не указывается порядок позиционных аргументов. Использование позиционного аргумента заставляет читателей читать исходный код Django, чтобы узнать, что это такое.
Когда вы используете аргументы ключевого слова, вы можете позиционировать свои аргументы как угодно, поэтому этот код будет работать так же:
private = models.BooleanField(
help_text=_('theme is available ONLY for the site.'),
verbose_name=_('private'),
default=False,
)
_('private')
устанавливает атрибут
verbose_name
.
Верхнее подчеркивание - это обычно используемый псевдоним функции для одной из функций ugettext, используемых механикой интернационализации (i18n).
It means that when you have i18n running, the labels will be translated into the appropriate end-user language, if a translation is available.
Check this answer: /questions/29712961/znachenie-lidiruyuschego-podcherkivaniya-v-spiske-kortezhej-ispolzuemyih-dlya-opredeleniya-polej-vyibora/29712972#29712972