引数 '()'とキーワード引数 '{}'を持つDjango Reverseが見つかりません


144

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

私はこのような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.

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


最新のジャンゴ、逆のURLからインポートされます。iefrom django.urls import reverse
suhailvs

回答:



6

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

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

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


1
私はその簡潔さが好きです。
Bartleby

2

この問題は、アクティベーションリンクの生成にリバースを使用してメールで送信しようとしたときに大きな頭痛を与えました。だから私は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
私はこれを試したところ、うまくいきません。@ miki725の答えは正しいです。
Daniel van Flymen 2017

1
ブレースが間違った場所にあると思います:response = client.get(reverse( 'edit_project'、project_id = 4))
Wim Feijen

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.