Django NoReverseMatch在重定向上传递参数时出错

时间:2017-06-13 11:04:01

标签: python django redirect django-views django-reversion

您好我试图从一个视图功能重定向到另一个视图功能并将列表列表作为参数传递。

urls.py

    urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^checkFiles/', views.checkFiles, name='checkoutFiles'),
    url(r'^$', views.home, name='home'),
    url(r'^upload/', views.upload, name='upload'),
    url(r'^login', views.loginview, name='loginview'),
    url(r'^logout/', views.logoutview, name='logoutview'),
    url(r'^confirm_files/', views.upload, name='confirm_file'),
    url(r'^upload/', views.del_files, name='del_files'),

]

views.py

使用此命令从views.upload重定向到views.checkoutFiles

return redirect(reverse('checkoutFiles', kwargs={'ACCEPTED_FILES':ACCEPTED_FILES}))

...

def checkFiles(request, ACCEPTED_FILES):
  print ACCEPTED_FILES
  return render(request, 'confirm_files.html', {
      'ACCEPTED_FILES': ACCEPTED_FILES
  })

我正在收到此错误消息

NoReverseMatch: Reverse for 'checkoutFiles' with keyword arguments '{'ACCEPTED_FILES': [[u't2_r0Oqwl7.txt', '0.98 KB', u'text/plain']]}' not found. 1 pattern(s) tried: ['checkFiles/']

django版本:1.11.2

2 个答案:

答案 0 :(得分:0)

当你调用reverse时,Django会跟随你在urls.py中的内容。在那里,您没有在checkoutFiles的正则表达式中指定任何参数。例如:

url(r'^articles/([0-9]{4})/$', views.year_archive, name='year-archive'),

在此示例中,您可以致电:

reverse('year-archive', args=[datetime.datetime.today().year])

https://docs.djangoproject.com/en/1.11/topics/http/urls/#example

在您的代码中,您必须指定您在该网址中收到的参数。

url(r'^checkFiles/(?P<extension>[\w]+)/$', views.checkFiles, name='checkoutFiles'),

虽然通过URL进行此类验证不是一个好主意。

编辑#2

如果您想在网址中包含某些内容,可以使用GET参数:

无论何时重定向,您都可以执行以下操作:

return redirect(reverse('checkoutFiles') + '?files={}'.format(ACCEPTED_FILES))

在您重定向到的视图中,您可以使用

获取值
request.GET.get('files', '')

https://docs.djangoproject.com/en/1.11/ref/request-response/#django.http.HttpRequest.GET

答案 1 :(得分:-1)

您应该在项目urls.py文件中添加名称空间,也可以在下面的代码中添加名称空间 例: PROJECT_NAME / urls.py

url(r'^appname/', include('appname.urls', namespace='namespace')),

views.py

 return redirect(reverse('namespace:checkoutFiles', kwargs={'ACCEPTED_FILES':ACCEPTED_FILES}))