2

私のPythonPyramidプロジェクトには、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)

次に、一連のExportThisandExportThatクラスを実装し、それらにIViewableandIExportableインターフェースを実装させ、それらを返してRoot.__getitem__、すべてが魔法のように機能します。または、複数のエクスポーターが必要ない場合は、インターフェイスを省略して、ビューをExportSomethingクラスに直接バインドできます。ExportSomethingまたは、getitemのさまざまなインスタンスをインスタンス化して作成することもできます... わかりませんが、さまざまなファイル/レポートを表示/エクスポートします。

于 2012-07-06T10:38:32.993 に答える