2012-07-06 51 views
2

我有幾個視圖類在我通過add_handler加入Python的金字塔項目:HOWTO創建的Python金字塔視圖類,而不需要指定「名稱」爲每個方法

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

謝謝。

+0

現在在pyramid_handlers中不支持這種行爲 – 2012-07-06 14:56:13

回答

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類。或者你可以在getitem實例化ExportSomething的不同實例,並使其... ...我不知道,查看/導出不同的文件/報告。

+0

如果在'/ export'你有Export,他可以做'view_config(context = IExportable,name =「fun」)''來匹配'/ export/fun '。遍歷非常棒。 – 2012-07-10 09:00:09

+0

我也建議使用'view_defaults'和'view_config'來代替pyramid_handler – 2012-07-10 09:01:19