Python - идиома, чтобы проверить, является ли строка пустой, печать по умолчанию - PullRequest
6 голосов
/ 24 декабря 2009

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

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

Приветствия, Виктор

Ответы [ 6 ]

6 голосов
/ 24 декабря 2009
displayname = firstname+' '+lastname if firstname and lastname else username
4 голосов
/ 24 декабря 2009

Я думаю, что эта проблема лучше обрабатывается в шаблонах примерно так:

{{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 голосов
/ 24 декабря 2009
displayname = firstname + lastname or username

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

2 голосов
/ 24 декабря 2009

Хорошо, я предполагаю, что вы имели в виду метод __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. Ну хорошо.

1 голос
/ 24 декабря 2009

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

name = data.Name or "Default Name"
0 голосов
/ 24 декабря 2009

Моя схема будет иметь None в качестве неустановленного имени или фамилии, поэтому ответ Фредерико не сработает. Итак:

print ("%s %s" % (firstname, lastname)
       if not (firstname and lastname) 
       else username )
...