在搜索书籍页面里,需要将每一条结果的作者,出版社,价格在一行展示,并以”/“分割。由于这三个属性还有可能为空,所以在html模板里处理不太方便。我们选择将这些数据处理的工作放在viewmodel中。
简单粗暴一点的方法是写一段 if-else 代码,将这三个属性以及可能为空的情况全都穷举出来,但是python给我们提供了更优雅的解决方式,就是使用filter过滤器+lambda表达式
class BookViewModel:
def __init__(self, book):
self.title = book['title'],
self.publisher = book['publisher'],
self.pages = book['pages'],
self.author = '、'.join(book['author']),
self.price = book['price'],
self.summary = book['summary'],
self.image = book['image']
# @property注解可以让我们把一个方法当做一个属性来使用
@property
def intro(self):
intros = filter(lambda x: True if x else False,
[self.author[0], self.publisher[0], self.price[0]])
return ' / '.join(intros)