Я просто задаюсь вопросом, там идиома Python, чтобы проверить, пуста ли строка, и затем распечатайте значение по умолчанию, если это?
(Контекстом является Django, для __unicode__(self)
функция для UserProfile - в основном, я хочу распечатать имя и фамилию, если это существует, и затем имя пользователя, если они оба не существуют).
С наилучшими пожеланиями, Victor
displayname = firstname + lastname or username
будет работать, если имя и фамилия имеют пустую строку 0 длины
displayname = firstname+' '+lastname if firstname and lastname else username
Хорошо, я предполагаю, что вы имели в виду метод __ 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. Ну ладно.
Думаю, эту проблему лучше решать в шаблонах с помощью чего-то вроде:
{{ user.get_full_name|default:user.username }}
В котором используется включенный в Django фильтр "по умолчанию". Также существует фильтр "default_if_none", если вас конкретно интересует значение None, но вы хотите разрешить пустое значение (т.е. ''). Фильтр "по умолчанию" будет работать как со значением None, так и со значением ''.
Вот ссылка на документацию Django: http://docs.djangoproject.com/en/dev/ref/templates/builtins/#default
Моя схема будет иметь Нет
в качестве неустановленного первого или последнего имени, чтобы ответ Фредерико не сработал. So:
print ("%s %s" % (firstname, lastname)
if not (firstname and lastname)
else username )