Django urlpatterns没有捕获命名路由

时间:2014-08-13 08:53:11

标签: python django django-views django-urls

我在项目层面有这个:

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^login/', include('myapp.urls')),
    url(r'^$', include('myapp.urls'))
)

这是在应用级别:

urlpatterns = patterns('',
    url(r'^login/', views.login, name = 'login'),
    url(r'^$', views.home, name = 'home')
)

导航到http://example.com工作正常并点击views.home功能/视图,但转到http://example.com/login也会点击views.home功能/视图而不是views.login如预期的那样。我知道我的正则表达式r'^login/'符合/login网址格式 - 我在这里做错了什么?这让我感到疯狂,因为它很简单。我在其他语言/框架中有很多URL路由/ MVC的经验,但对于Django来说却是一个新的。

一个线索是导航到http://example.com/login/login(模式两次)点击views.login路线......

1 个答案:

答案 0 :(得分:2)

您的网址非常混乱。您为“login /”开头的URL和从路径开始的所有URL都包含“home”url模式。因此,以“login /”开头的URL会将该前缀切断,然后在主网址模式中开始匹配。当然,当它到达那里时,它现在只包含一个空字符串,因此匹配空的url模式。

您应该编辑项目网址以完全删除第一个“登录”模式,并编辑catch-all模式以删除“$”字符(您希望匹配所有前缀,而不是空字符串)。

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'', include('myapp.urls'))
)