【问题标题】:Turbogears: duplicate controller method for filtered objectsTurbogears:过滤对象的重复控制器方法
【发布时间】:2021-03-26 14:59:50
【问题描述】:

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

@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)

如何不复制代码而只复制具有不同输入结果的方法? 我希望有单独的端点工作相同但过滤输入。

【问题讨论】:

    标签: python turbogears2


    【解决方案1】:

    您是否考虑过使用带有_default 方法的子控制器?

    https://turbogears.readthedocs.io/en/latest/turbogears/objectdispatch.html#the-default-method

    那时你可以做

    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 只会给您香蕉等等......您还可以提供默认参数name=None 以防万一你想让GET /fruits 只返回所有水果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-21
      • 2017-04-04
      • 2021-08-19
      • 2023-01-02
      相关资源
      最近更新 更多