Модели Django - Синтаксис поля - PullRequest
0 голосов
/ 25 ноября 2018

Быстрый вопрос о некотором синтаксисе при создании моделей django.Если вы посмотрите на пример файла models.py ниже, то увидите, что каждое из четырех полей содержит повтор имени поля в виде строки в скобках, предшествующей моему подчеркиванию.Я предполагаю, что это своего рода визуальное представление для случая, когда это встречается в форме, но это, кажется, происходит автоматически в админке без _ ('имя поля').

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)

1 Ответ

0 голосов
/ 25 ноября 2018

Все встроенные типы полей наследуются от Класса поля .Если вы посмотрите на вызов __init__() для этого класса, вы увидите, что первым параметром в функции является параметр verbose_name.Так что это говорит нам о том, что эти строки соответствуют.

Конструкция _('some text') является довольно распространенным синтаксисом для выполнения интернационализации (также известной как i18n ).Я видел этот синтаксис в других языках, таких как PHP.Это позволяет отображать подробное имя на разных языках при переводе кода.Как вы заметили в комментариях выше, функция ugettext_lazy импортируется как псевдоним _.Это позволяет программистам (все они ленивы) набирать _('some text') вместо ugettext_lazy('some text') в в каждом месте, где необходимо перевести текст.Поскольку в приложении могут быть сотни (или тысячи) жестко закодированных строк, это экономит программисту много времени в долгосрочной перспективе.

Это ужасный хак, но он выполняет свою работу.Мне это особенно не нравится в Python, поскольку оно переопределяет иногда полезное имя _, которое часто используется в качестве имени переменной-заполнителя, когда вы хотите выбросить значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...