如何在Turbogears中创建可以在控制器内调用或使用模板渲染的控制器方法

时间:2009-01-17 22:43:54

标签: python json turbogears

如果您有这样的控制器方法:

@expose("json")
def artists(self, action="view",artist_id=None):
    artists=session.query(model.Artist).all()
    return dict(artists=artists)

如何在控制器类中调用该方法,并返回python dict - 而不是dict的json编码字符串(需要您将其从json解码回python dict)。是否真的有必要编写一个函数来从模型中获取数据,而另一个函数是否需要打包这些数据以供模板使用(KID,JSON)?为什么在同一个类中调用此方法时,例如:

artists = self.artists()

如果该方法作为HTML请求的一部分被调用,那么您将获得一个json字符串。 我错过了什么?

1 个答案:

答案 0 :(得分:1)

我通常通过使用'worker'方法来查询数据库,转换结果等,以及单独的公开方法,以及所有必需的装饰器。 E.g:

# The _artists method can be used from any other method
def _artists(self, action, artist_id):
    artists = session.query(model.Artist).all()
    return dict(artists=artists)

@expose("json")
#@identity.require(identity.non_anonymous())
# error handlers, etc.
def artists(self, action="view", artist_id=None):
    return self._artists(action=action, artist_id=artist_id)