Python просто first_name last_initial, когда last_name может быть пустым - PullRequest
1 голос
/ 18 января 2012

Работа в Джанго.

Создание вывода в кодировке Unicode для модели профиля, где фамилия пользователя является необязательной.

Desired:
  John D. if last name
  John if not last name

Acceptable (though not ideal):
  John . if not last name 

Текущий код:

def __unicode__(self):
    return "%s %s." % (self.user.first_name, self.user.last_name[0])

Обычно это работает, чтобы получить приемлемый результат, но терпит неудачу, когда last_name == "".

Есть ли однострочная идиома python для генерации желаемого результата? Я искал в Google и переполнении стека полдюжины поисковых терминов и нашел гусиные яйца.

Ответы [ 3 ]

2 голосов
/ 18 января 2012

Может быть, вы можете использовать что-то вроде этого:

def __unicode__(self):
    return "%s%s" % (self.user.first_name,
                     " %s." % self.user.last_name[0]
                       if self.user.last_name
                       else "")
2 голосов
/ 18 января 2012

Простой выход:

def format_name(fname, lname):
    if lname:
        return "{0} {1}.".format(fname, lname)
    return fname

Тогда просто return format_name(self.user.first_name, self.user.last_name) в вашем __unicode__.Это одна строка, где это имеет значение (в вашей модели) и доступно для чтения.

2 голосов
/ 18 января 2012

Как насчет:

return self.user.first_name + (' %s.' % self.user.last_name[0] if self.user.last_name  else '')

Выше написано в виде одной строки, так как вы специально попросили один. Лично я бы разбил его на две строки:

first, last = self.user.first_name, self.user.last_name
return first + (' %s.' % last[0] if last else '')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...