Django重定向上的NoReverseMatch错误

时间:2016-01-23 16:16:18

标签: python regex django redirect

我在django项目的 电影 应用中遇到以下异常:

  

异常类型:/ movie /的NoReverseMatch   异常值:反向'movie.views.movi​​e_detail',参数'(u'the_peanuts_movie',)'和关键字参数'{}'未找到。尝试了0种模式:[]

以下是movie.urls.py的网址格式:

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^(?P<movie_name>[\w_]+)$', views.movie_detail, name='movie_detail'),
    url(r'^', views.movie_home, name='movie_home'),
]

以下是movies.views.py的一些部分:

def movie_detail(request, movie_name):
     # code
     ...

def movie_home(request):
    ...
    return redirect(movie_detail, movie_name)
    # movie_name is a string

到目前为止,我无法使此代码正常工作。但是如果我更改 返回语句 并将其放入 movie_home函数 中,它就可以了:

    movie_name += '/'
    return redirect(movie_name)

现在在stackoverflow中读了这个类型的其他一些问题后,我知道return redirect(movie_name)语句可以正常工作,因为它重定向到了一个url: 127.0.0.1:8000/movie/whatever_is_the_movie_name

但我不明白为什么重定向到 movie_detail 视图无效。

我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:2)

首先,movie_detail应该是一个字符串('movie_detail'),并且在'movie'名称空间下 - 也可以尝试使用reverse并将名称作为arg传递:

return redirect(reverse('movie:movie_detail', args=[movie_name]))

此外,您似乎错过urls.py之前$中的结尾斜线:

url(r'^(?P<movie_name>[\w_]+)/$', views.movie_detail, name='movie_detail'),

答案 1 :(得分:0)

尝试一下:

movie.urls.py

from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^(?P<movie_name>[\w_]+)$', views.movie_detail, name='movie_detail'),
url(r'^', views.movie_home, name='movie_home'),
]

movie.views.py

def movie_detail(request, movie_name):
    # code
    ...

def movie_home(request):
    ...
    return redirect('movie:movie_detail', movie_name) #CHANGES : (appname:url_name as str)
    # movie_name is a string