Поле модели Django содержит странный атрибут _ («частный»)
В настоящее время я изучаю Django и во время чтения натолкнулся на приведенный ниже блок кода, который я не понимаю.
private = models.BooleanField(
_('private'),
default=False,
help_text=_('theme is available ONLY for the site.'),
)
Вышеупомянутая строка кода содержит, _('private')и я не могу понять, что она делает. Я знаю об использовании _для перевода. Почему имя атрибута не указано для _("private")?
Я пытался найти ответ в Интернете, но не смог.
Благодарю.
Ответы
Как вы можете видеть в исходном коде Django , конструктор a 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).
Это означает, что когда у вас запущен i18n, метки будут переведены на соответствующий язык конечного пользователя, если перевод доступен.
Отметьте этот ответ: https://stackoverflow.com/a/2964256/9361129