168

嗨,我有一个令人愤怒的问题。

我有一个这样的网址模式:

# mproject/myapp.urls.py

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

它在浏览器中运行良好,但对于测试,当我在 shell 中执行此操作时:

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 回答