web-dev-qa-db-ja.com

Django引数 '()'およびキーワード引数 '{}'が見つかりませんで反転します

こんにちは私は腹立たしい問題を抱えています。

次のようなURLパターンがあります。

# mproject/myapp.urls.py

url(r'^project/(?P<project_id>\d+)/$','user_profile.views.EditProject',name='edit_project'),

ブラウザでは正常に動作しますが、テストでは、シェルでこれを行うと:

from Django.test import Client
from Django.core.urlresolvers import reverse

client= Client()
response = client.get(reverse('edit_project'), project_id=4)

私は恐ろしい:

NoReverseMatch: Reverse for 'edit_project' with arguments '()' and keyword arguments '{}' not found.

ここで何が欠けていますか?

115
Darwin Tech

project_idを指定する必要があります:

reverse('edit_project', kwargs={'project_id':4})

Doc ここ

221
miki725

ソリューション@ miki725は絶対に正しいです。または、argsではなくkwargs属性を使用する場合は、次のようにコードを簡単に変更できます。

project_id = 4
reverse('edit_project', args=(project_id,))

この例は documentation にあります。これは基本的に同じことを行いますが、属性は引数として渡されます。渡される引数には、値を割り当ててから元に戻す必要があることに注意してください。正しい名前空間(この場合は'edit_project')を使用するだけです。

3
Srivats Shankar

アクティベーションリンクを生成するためにリバースを使用し、もちろん電子メールで送信しようとしたときに、この問題は頭痛の種になりました。だから、tests.pyからも同じだと思います。これを行う正しい方法は次のとおりです。

from Django.test import Client
from Django.core.urlresolvers import reverse

#app name - name of the app where the url is defined
client= Client()
response = client.get(reverse('app_name:edit_project', project_id=4)) 
1
KRH

解決もより簡単です

from Django.urls import resolve

resolve('edit_project', project_id=4)

このショートカットのドキュメント

0
SebCorbin