使用参数重定向。 NoReverseMatch at / test /

时间:2013-07-19 06:11:01

标签: django

views.py:

def demo(request, **kwargs):
    print response
    ......

def test(request):
    ......
    kwargs = {'response': response}
    return redirect('demo', **kwargs)

urls.py:

from django.conf.urls import patterns, url
from django.contrib.sitemaps.views import sitemap


urlpatterns = patterns('clients.views',
    url(r'^test/', 'test', name='test'),
    url(r'^demo/', 'demo', name='demo'),

)

为什么我有这个错误:

  

/ test /

的NoReverseMatch      

使用参数'()'和关键字参数反转'demo'   '{'回复':{u'status':u'ok'}}'找不到。

     

请求方法:POST请求URL:http://127.0.0.1:8000 / test /

4 个答案:

答案 0 :(得分:4)

使用redirect()快捷方式时,您实际上正在执行HttpResponseRedirect(),因此需要才能在kwargs中包含回复。

此外,如果您想使用keyworded参数重定向,那么调用将是

redirect('/myurl/', momma="im comin' home")

redirect('/myurl/', kwargs={'loads_a_kwargs':'cowboy'})

您收到的错误是因为您的正则表达式url(r'^demo/', 'demo', name='demo') 接受任何参数。此外,通常您会使用$结束所有网址正则表达式,以表示捕获应该停止。

答案 1 :(得分:0)

这些错误只是来自test视图,而是来自demo视图。根据url反向匹配.. demo url必须与demo视图函数参数匹配。

例如:url:demo/应为demo/<response>

如果您不想更改网址格式,请将GET参数的回复设为demo视图。

答案 2 :(得分:0)

当您说redirect('demo', **kwargs)时,它会在内部尝试找到urlpattern demo/(?P<response>\d+)。实际上它可以是\d+\w+或其他。但是你没有定义这个urlpattern,所以它失败了。

因此,如果您定义这样的url模式,它将通过。但是代码的另一个问题是response中的kwargs是一个字典,你无法在网址模式中捕获字典。

您想要与status代码一起重定向到演示的任何特殊原因吗?

答案 3 :(得分:0)

NoReverseMatch异常当根据您给出的参数无法识别URLconf中的匹配URL时发生。请参阅django文档https://docs.djangoproject.com/en/dev/ref/exceptions/#noreversematch

我正在查看您的url.py您未包含$

url(r'^test/$', 'test', name='test'),