6

我只是想知道,是否有一个 Python 习惯用法来检查字符串是否为空,如果是则打印默认值?

(上下文是 Django,__unicode__(self)用于 UserProfile 的函数 - 基本上,我想打印名字和姓氏(如果存在),然后打印用户名(如果它们都不存在)。

干杯,维克多

4

6 回答 6

6
displayname = firstname+' '+lastname if firstname and lastname else username
于 2009-12-24T01:38:35.640 回答
4
displayname = firstname + lastname or username

如果名字和姓氏的长度为 0 空白字符串,则将起作用

于 2009-12-24T01:30:44.600 回答
4

我认为这个问题最好在模板中处理,例如:

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

它使用 Django 包含的“默认”过滤器。如果您特别关心 None 值,但希望允许空白值(即 ''),还有一个“default_if_none”过滤器。“默认”过滤器将同时触发 None 值和 '' 值。

这是 Django 文档的链接:http: //docs.djangoproject.com/en/dev/ref/templates/builtins/#default

于 2009-12-24T17:26:08.910 回答
2

好的,我假设您的意思是__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 代码。那好吧。

于 2009-12-24T01:31:27.723 回答
1

就像是:

name = data.Name or "Default Name"
于 2009-12-24T01:30:37.243 回答
0

我的架构将具有None未设置的名字或姓氏,因此弗雷德里科的回答不起作用。所以:

print ("%s %s" % (firstname, lastname)
       if not (firstname and lastname) 
       else username )
于 2009-12-24T02:15:36.453 回答