我在django项目的 电影 应用中遇到以下异常:
异常类型:/ movie /的NoReverseMatch 异常值:反向'movie.views.movie_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 视图无效。
我怎样才能让它发挥作用?
答案 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