168

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

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

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

4

4 に答える 4

323

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

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

ここにドキュメント

于 2012-11-02T20:16:05.147 に答える
18

解決策@miki725は絶対に正しいです。argsまたは、ではなく属性を使用する場合はkwargs、次のようにコードを変更するだけです。

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

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

于 2019-01-22T16:12:36.550 に答える
4

もちろん、アクティベーションリンクを生成し、それを電子メールで送信するためにリバースを使用しようとしたとき、この問題は私に大きな頭痛の種を与えました。だから私は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)) 
于 2015-08-21T16:45:02.050 に答える
1

関数resolve_urlもより簡単です

from django.shortcuts import resolve_url

resolve_url('edit_project', project_id=4)

このショートカットに関するドキュメント

于 2017-06-18T10:28:15.103 に答える