Python Turbogears:过滤对象的复制控制器方法

Python Turbogears:过滤对象的复制控制器方法,python,turbogears2,Python,Turbogears2,如果您有这样的控制器方法: @expose('example.templates.example.index') def index(self, *args, **kw): fruits=session.query(model.Fruit).all() # some code working on fruits return dict(fruits=fruits) 如何为相同的html呈现复制该方法,但使用过滤对象,如示例 @expose('example.templa

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

@expose('example.templates.example.index')
def index(self, *args, **kw):
    fruits=session.query(model.Fruit).all()
    # some code working on fruits
    return dict(fruits=fruits)
如何为相同的html呈现复制该方法,但使用过滤对象,如示例

@expose('example.templates.example.index')
def filtered(self, name="apple", *args, **kw):
    fruits=session.query(model.Fruit).filter_by(name=name).all()
    # some code working on fruits (same as in index)
    # how to not duplicate the code but duplicate method with different input fruits?
    return dict(fruits=fruits)
如何不复制代码而只复制具有不同输入结果的方法?
我希望有单独的端点以相同的方式工作,但使用过滤输入。

您是否考虑过使用带有
\u default
方法的分包商

在那一点上你可以做到

class FruitsController:
    @expose('example.templates.example.index')
    def _default(self, name, *args, **kwargs):
        fruits=session.query(model.Fruit).filter_by(name=name).all()
        return dict(fruits=fruits)

class RootController:
    fruits = FruitsController()
结果是,当你要求
GET/fuits/apple
时,你只会拿回苹果,
GET/fruits/banana
只会拿回香蕉等等。。。如果您想让
GET/fruits
只返回所有水果,您还可以提供一个默认参数o
name=None