我在项目层面有这个:
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
路线......
答案 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'))
)