【问题标题】:NoReverseMatch Error on Django RedirectDjango重定向上的NoReverseMatch错误
【发布时间】:2016-01-23 16:16:17
【问题描述】:

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

异常类型:/movie/ 处的 NoReverseMatch 异常值:“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'),
]

这里是 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

到目前为止,我无法让这段代码工作。但如果我更改 return 语句 并将其放入 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 视图不起作用。

我怎样才能让它工作?

【问题讨论】:

    标签: python regex django redirect


    【解决方案1】:

    首先,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'),
    

    【讨论】:

    • 它不起作用。以下是异常:异常类型:NoReverseMatch at /movie/ 异常值:“movie_detail”的反向参数“(u'the_peanuts_movie',)”和关键字参数“{}”未找到。尝试了 0 个模式:[]
    • 更新了我的答案,添加第二部分看看现在是否有效
    • 当我使用 'movie:movie_detail' 时,您的解决方案有效……这是因为命名空间问题吗?
    • 太棒了!是的,命名空间允许您在不同的应用程序下使用相似的名称以避免冲突。很高兴它成功了!
    • 感谢您的帮助。我被这个问题困扰了很长时间,似乎没有其他答案提到这个命名空间问题!
    【解决方案2】:

    试试这个:

    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'),
    ]
    

    电影.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
    

    【讨论】:

      猜你喜欢
      • 2020-06-11
      • 1970-01-01
      • 2014-01-20
      • 2023-03-21
      • 2017-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-21
      相关资源
      最近更新 更多