0

現在、プロジェクトを Pylons 1.0 から Pyramid に移行しています。

これまでのところ、私の問題は Pyramid で安らかなルートを使用する方法です。私は現在、良いスタートのように思えたので、pyramid_handlers を使用しています。私はAkhetを使用しています。

したがって、ここに私のルートの 2 つの重要な行があります。

config.add_handler("new_account", "/accounts/new", "sproci2.handlers.accounts:Accounts")
# or 
config.add_handler("new_account", "/accounts/new", "sproci2.handlers.accounts:Accounts", action="new")

私の行動:

@action(name="new_account", renderer='accounts/new.mako', request_method='GET')

エラー:

 TypeError: 'Accounts' object is not callable
 or
 ValueError: Could not convert view return value "{}" into a response Object.

アカウント...これまでのところ非常に良いので、pyramid_handlersが正常に登録されていないか、名前を適切に処理していないように見えることは簡単に理解できます... でrequest.matched_route、私は「new_account」を持っています。

ルート定義に「action='new'」を追加すると、関数は見つかりますが、アクション定義をリッスンしません。つまり、レンダラーを見つけられず、応答オブジェクトを期待できません。パラメータはrequest_methodまだ実際には何もしないので、削除しても結果は変わりません。

要するに、@action(name="..."機能しません。Pyramid はそれ自体で関数を見つけることができず、関数名が定義されている場合、アクション ステートメントの実行に失敗します。

私が間違っていることはわかりません。

正しいやり方。

config.add_handler("new_account", "/accounts/new", "sproci2.handlers.accounts:Accounts", action="new_account")

編集

route_nameおそらく、URL ジェネレーター関数で使用されるようになるでしょう。action は @action の実際の名前です。私が理解したように、 @action name は route_name であり、アクション名ではありませんでした。それは今より理にかなっています。

4

1 に答える 1

0

への呼び出しにadd_handlerはアクション パターンが必要です。つまり{action}、URL パターンに追加するかaction=、引数として設定します。これらのアクションは、@actionデコレータで定義された名前と一致する必要があります。あなたの例では、アクションに名前を付けましたが、アクションnew_accountで呼び出しadd_handlerましたnew。したがって、それらは正しく接続されていません。

于 2011-09-30T08:52:28.157 に答える