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 /
答案 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'),