8.1 viewmodel意义的体现与filter函数的巧妙应用

在搜索书籍页面里,需要将每一条结果的作者,出版社,价格在一行展示,并以”/“分割。由于这三个属性还有可能为空,所以在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)

Last updated