こんにちは私は腹立たしい問題を抱えています。
次のような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.
ここで何が欠けていますか?
ソリューション@ miki725は絶対に正しいです。または、args
ではなくkwargs
属性を使用する場合は、次のようにコードを簡単に変更できます。
project_id = 4
reverse('edit_project', args=(project_id,))
この例は documentation にあります。これは基本的に同じことを行いますが、属性は引数として渡されます。渡される引数には、値を割り当ててから元に戻す必要があることに注意してください。正しい名前空間(この場合は'edit_project'
)を使用するだけです。
アクティベーションリンクを生成するためにリバースを使用し、もちろん電子メールで送信しようとしたときに、この問題は頭痛の種になりました。だから、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))