Python - Идиома, чтобы проверить, пуста ли строка, значение по умолчанию печати

Я просто задаюсь вопросом, там идиома Python, чтобы проверить, пуста ли строка, и затем распечатайте значение по умолчанию, если это?

(Контекстом является Django, для __unicode__(self) функция для UserProfile - в основном, я хочу распечатать имя и фамилию, если это существует, и затем имя пользователя, если они оба не существуют).

С наилучшими пожеланиями, Victor

6
задан Blair Conrad 24 December 2009 в 01:44
поделиться

6 ответов

displayname = firstname + lastname or username

будет работать, если имя и фамилия имеют пустую строку 0 длины

4
ответ дан 8 December 2019 в 13:46
поделиться
displayname = firstname+' '+lastname if firstname and lastname else username
6
ответ дан 8 December 2019 в 13:46
поделиться

Что-то вроде:

name = data.Name or "Default Name"
1
ответ дан 8 December 2019 в 13:46
поделиться

Хорошо, я предполагаю, что вы имели в виду метод __ unicode __ () . Попробуйте что-нибудь вроде этого (не проверено, но очень близко к правильному):

from django.utils.encoding import smart_unicode
def __unicode__(self):
    u = self.user
    if u.firstname and u.lastname:
        return u"%s %s" % (u.firstname, u.lastname)
    return smart_unicode(u.username)

Я только что понял, что вы запросили идиому Python, а не код Django. Ну ладно.

2
ответ дан 8 December 2019 в 13:46
поделиться

Думаю, эту проблему лучше решать в шаблонах с помощью чего-то вроде:

{{ user.get_full_name|default:user.username }}

В котором используется включенный в Django фильтр "по умолчанию". Также существует фильтр "default_if_none", если вас конкретно интересует значение None, но вы хотите разрешить пустое значение (т.е. ''). Фильтр "по умолчанию" будет работать как со значением None, так и со значением ''.

Вот ссылка на документацию Django: http://docs.djangoproject.com/en/dev/ref/templates/builtins/#default

4
ответ дан 8 December 2019 в 13:46
поделиться

Моя схема будет иметь Нет в качестве неустановленного первого или последнего имени, чтобы ответ Фредерико не сработал. So:

print ("%s %s" % (firstname, lastname)
       if not (firstname and lastname) 
       else username )
0
ответ дан 8 December 2019 в 13:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: