鍍金池/ 問(wèn)答/Python  Linux/ tornado如何把異步函數(shù)傳遞到模板里面?

tornado如何把異步函數(shù)傳遞到模板里面?

我的模板里面是直接for遍歷后端的一個(gè)函數(shù)A,這個(gè)函數(shù)A會(huì)查詢數(shù)據(jù)庫(kù)并返回查詢出來(lái)的數(shù)據(jù)(dict),數(shù)據(jù)庫(kù)是mongodb,現(xiàn)在我用motor的異步方式來(lái)改寫(xiě)函數(shù)A,然后查詢出來(lái)的數(shù)據(jù)用gen.Return()返回,可是這樣返回的是Future對(duì)象,模板沒(méi)辦法直接用,必須再yield一次才能獲得可用的數(shù)據(jù)。 我現(xiàn)在需要的是模板里面for遍歷的函數(shù)是可以直接返回一個(gè)可迭代對(duì)象的,下面上代碼:

@tornado.gen.coroutine
def get(self, objid):
    ... 省略邏輯 ...
    self.render( "article.html", get_article=self.get_article )

@tornado.gen.coroutine
def get_article(self, number, thumb, desc, cat, rand):
    """ 
        下面的a變量會(huì)異步獲取到所查詢的數(shù)據(jù),F(xiàn)uture封裝過(guò)的對(duì)象
        do_get_article_list函數(shù)也是用tornado.gen.Return返回的 
    """
    a = yield do_get_article_list(5, 1, 1, '', 1)
    tornado.gen.Return(a)
    
    """ 
        其實(shí)直接yield就可以獲取到異步返回的數(shù)據(jù),但是我要把這個(gè)數(shù)據(jù)傳遞到模板里面就不知道怎么弄了
    """
回答
編輯回答
命多硬

直接return a就行了吧,沒(méi)必要用gen.Return

2018年2月5日 21:41