Python简单处理first_name和last_initial,当last_name可能为空时

1 投票
3 回答
578 浏览
提问于 2025-04-17 10:28

我在用Django开发。

我想为用户资料模型创建一个可以显示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 == "")时就不行了。

有没有一种一行代码的写法可以生成我想要的输出?我在谷歌和Stack Overflow上搜索了好几种关键词,但都没有找到合适的答案。

3 个回答

2

也许你可以试试这样的东西:

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

这样写怎么样:

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 '')
2

简单的方法:

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

然后在你的 __unicode__ 里直接 return format_name(self.user.first_name, self.user.last_name)。这是一行重要的代码(在你的模型里),而且也很容易理解。

撰写回答