2

私はこれで少し投げられます。私は完全にうまく動作する次のコードを持っています:

urlresolvers.reverse('admin:cards_card_change', args=([92]))

理解を深めるために、次のように行を書き直してみたいと思いました。

urlresolvers.reverse('admin:cards_card_change', kwargs={'object_id':92})

管理ビューの反転に関するドキュメントで示唆されているようです(私はDjango 1.4を使用しています)。

しかし、これはまったく一致していないようです。なぜだめですか?回答を求めてdjangoソースコードを調べてみましたが、変更に使用されるビューが見つからなかったため、そこにある関連モジュールへのリンクも非常に役立ちます!

4

2 に答える 2

2

urlpattern変更ビューはadmin /options.pyにあります:

url(r'^(.+)/$',
    wrap(self.change_view),
    name='%s_%s_change' % info),

インスタンスのchange_viewメソッドにリクエストがディスパッチされていることがわかります。メソッドはadmin/options.pyにも存在しますModelAdminchange_view

def change_view(self, request, object_id, form_url='', extra_context=None):
    ...

パラメータを受け入れますobject_id

の一致が見つからない理由は、次のように変更した場合reverseurlpattern上記が名前付きパラメーターを受け入れないためです。

url(r'^(?P<object_id>.+)/$',
    wrap(self.change_view),
    name='%s_%s_change' % info),

動作するurlresolvers.reverse('admin:cards_card_change', kwargs={'object_id':92})はずです。

いくつかのエッジ ケースを回避することを意図したものなのか、それとも単なるバグであり、これを修正するためのチケットが既にあるのかはわかりません。後で確認します。

于 2012-11-28T17:12:08.237 に答える
0

これはPythonの構文の問題だと思います。**kwargsとはとれないということ*argsです。呼び出そうとしている関数には、最初の引数 ( object_id) があり、これは位置指定されており、名前付き引数として使用できません。(間違ってたら誰か教えて)

あなたにとって、object_idは位置引数であるため、kwargs で使用された場合は無視されます

ビュー関数がkwargsでもobject_idを受け入れるようにするには、たとえば次のように変更する必要があります

my_id = kwargs.get('object_id', args[0])
于 2012-11-28T16:34:57.550 に答える