Django 重定向上的 NoReverseMatch 错误

Asi*_*bel 0 python regex django redirect

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

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

以下是 movie.urls.py 的 url 模式:

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'),
]
Run Code Online (Sandbox Code Playgroud)

以下是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
Run Code Online (Sandbox Code Playgroud)

到目前为止,我无法使这段代码工作。但它有效,如果我更改return 语句并将其放入movie_home 函数

    movie_name += '/'
    return redirect(movie_name)
Run Code Online (Sandbox Code Playgroud)

现在在 stackoverflow 中阅读了其他一些此类问题后,我知道该return redirect(movie_name)语句有效,因为它重定向到一个 url:127.0.0.1 : 8000/movie/whatever_is_the_movie_name

但我不明白为什么重定向到movie_detail视图不起作用。

我怎样才能让它工作?

Hyb*_*rid 5

首先,movie_detail应该是一个字符串 ( 'movie_detail') 并在'movie'命名空间下 - 另外,尝试使用 reverse 并将名称作为参数传递:

return redirect(reverse('movie:movie_detail', args=[movie_name]))
Run Code Online (Sandbox Code Playgroud)

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

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