我的 Python Pyramid 项目中有几个 View 类是通过 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 。现在我得到页面未找到错误
谢谢。
请您参考如下方法:
你可以通过遍历来做到这一点。遍历岩石:)
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)
然后你可以实现一堆ExportThis和ExportThat类,让它们实现IViewable和IExportable接口(interface),让它们从 Root.__getitem__ 返回,一切都神奇地工作。或者,如果您不需要多个导出器,您可以省略接口(interface)并将 View 直接绑定(bind)到 ExportSomething 类。或者您可以在 getitem 中实例化 ExportSomething 的不同实例,并使其...我不知道,查看/导出不同的文件/报告。
