url重定向在django中不起作用?

时间:2014-04-08 21:52:49

标签: django django-urls

我的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。我不知道为什么? 如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

尝试将第二个网址附加到与第三个网址相同的视图,使用类似的内容。

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

这有用吗?

答案 1 :(得分:0)

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

要解决此问题,您可以执行以下操作:

redirect(reverse_lazy('home'))

或:

redirect('home/')

请注意,如果您执行第一个选项,则需要导入reverse_lazy。如果你做了第二个选项,你就是硬编码的,这是不理想的。