Python简单处理first_name和last_initial,当last_name可能为空时
我在用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)
。这是一行重要的代码(在你的模型里),而且也很容易理解。