【问题标题】:url redirect is not working in django?url 重定向在 django 中不起作用?
【发布时间】:2014-05-21 20:26:06
【问题描述】:

我的 urls.py 是:

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^$', redirect('home')),
    url(r"^home/$", 'my_project.views.user_login', name="home"),
    #url(r'^/$', redirect('home')),
)

我想将 http://127.0.0.1:8000http://127.0.0.1:8000/home 定向到同一视图进行处理。 为了简单起见,我还有其他的 urlpatterns,我没有在上面列出。 目前,当我访问此http://127.0.0.1:8000/home/ 时,它会引发以下错误:

ImproperlyConfigured at /home/
The included urlconf cmv_project.urls doesn't have any patterns in it
Request Method: GET
Request URL:    http://127.0.0.1:8000/home/
Django Version: 1.6
Exception Type: ImproperlyConfigured
Exception Value:    
The included urlconf cmv_project.urls doesn't have any patterns in it

当我注释掉第二个 urlpattern (url(r'^$', redirect('home')),) 时,它可以工作。 我试图将这个 urlpattern 切换到最后一个。但它仍然没有帮助。拥有这种模式会破坏 urls.py 中的其他 Urlpatterns。我不知道为什么? 如何解决这个问题?

【问题讨论】:

    标签: django django-urls


    【解决方案1】:

    尝试将第二个 url 附加到与第三个 url 相同的视图,使用类似的东西。

    url(r"^$",my_project.views.user_login, name="home")
    

    另一种方法是。

    from django.core.urlresolvers import reverse_lazy
    from django.views.generic import RedirectView
    
    urlpatterns = patterns('',
        url(r'^/$', RedirectView.as_view(url=reverse_lazy('home'))),
    

    这行得通吗??

    【讨论】:

    • 但这不是重定向也不是 DRY?
    • 这是一种非常粗糙的导演方式,但它会奏效
    【解决方案2】:

    我认为它类似于this question。基本上,当您使用带有名称的redirect 时,它将使用reverse 来查找它。见example 2 here。您需要改用reverse_lazy

    要解决此问题,您可以这样做:

    redirect(reverse_lazy('home'))
    

    或:

    redirect('home/')
    

    请注意,如果您执行第一个选项,则需要导入 reverse_lazy。如果您执行第二个选项,您将被硬编码,这并不理想。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-23
      • 2014-08-30
      • 2014-11-22
      • 2018-05-14
      • 2017-07-05
      • 1970-01-01
      相关资源
      最近更新 更多