4

视图.py:

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

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

网址.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

未找到带有参数“()”和关键字参数“{'response': {u'status': u'ok'}}' 的“演示”的反向操作。

请求方式:POST 请求网址:http://127.0.0.1:8000/test/

4

4 回答 4

4

使用redirect()快捷方式时,您实际上是在执行 a HttpResponseRedirect(),因此不需要响应包含在您的kwargs.

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

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

或者

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

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

于 2013-07-19T06:21:05.580 回答
0

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

我在看你的url.py你没有包括在内$

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

于 2013-07-19T06:43:03.523 回答
0

那个错误不是从你的test观点而是从你的demo观点提出的。根据 url 反向匹配 .. 演示 url 必须与演示视图函数参数匹配。

例如:网址:demo/应该是demo/<response>

如果您不想更改 url 模式,则将您的响应作为GET参数进行demo查看。

于 2013-07-19T06:32:57.283 回答
0

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

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

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

于 2013-07-19T06:36:37.073 回答