2

我的 Python Pyramid 项目中通过 add_handler 添加了几个视图类:

config.add_handler('export_index', '/export', handler=ExportViews, action='index')

class ExportViews(ConfigViewBase):
    @action(request_method='POST', name='index',
            request_param='ftp_export.form.submitted')
    @action(request_method='POST', name='index', xhr=True, renderer='json',
            request_param='ftp_export.form.submitted')
    def ftp_export(self):
         #process form
         return {}

    @action(request_method='GET')
    def index(self):
        return {}

是否可以做同样的事情:

config.add_handler('export_index', '/export', handler=ExportViews)

class ExportViews(ConfigViewBase):
    @action(request_method='POST',
            request_param='ftp_export.form.submitted')
    @action(request_method='POST', xhr=True, renderer='json',
            request_param='ftp_export.form.submitted')
    def ftp_export(self):
         #process form
         return {}

    @action(request_method='GET')
    def __call__(self):
        return {}

所以当浏览器获取页面时调用了 __call__ ,当我在同一页面上发布表单时应该调用 ftp_export 。现在我明白了page not found error

谢谢你。

4

1 回答 1

1

你可以通过遍历来做到这一点。穿越岩石:)

class Root(object):
    def  __getitem__(self, name):
        if name == "export":
            return ExportSomething(self)
        if name == "export_something_else":
            return ExportSomethingElse(self)



class ExportSomething(object):

    implements(IViewable, IExportable)

    def view(self, request):
        return "Hi"

    def export(self, request):
        return "something else"

@view_config(context=IViewable, request_method="GET")
def view_viewable(conext, request):
    return context.view(request)

@view_config(context=IExportable, request_method="POST")
def export_exportable(conext, request):
    return context.export(request)

然后你可以实现一堆ExportThisExportThat类,让它们实现IViewableIExportable接口,让它们返回Root.__getitem__,一切都神奇地工作。或者,如果您不需要多个导出器,您可以省略接口并将视图直接绑定到ExportSomething类。ExportSomething或者您可以在getitem中实例化不同的实例并使其...我不知道,查看/导出不同的文件/报告。

于 2012-07-06T10:38:32.993 回答