没有结尾斜杠的djangourl不会redirect

我有两个应用程序位于两台独立的计算机上。 在计算机A上,在urls.py文件中,我有一行如下所示:

 (r'^cast/$', 'mySite.simulate.views.cast') 

该url将同时适用于mySite.com/cast/mySite.com/cast 。 但在计算机上BI有一个类似的url写出来,如:

 (r'^login/$', 'mySite.myUser.views.login') 

出于某种原因,在计算机B上的url mySite.com/login /将工作,但mySite.com/login将挂起,不会直接回到mySite.com/login/就像它会在计算机A.是否有我错过了什么? 这两个url.py文件看起来都和我一样。

检查settings.py文件中的APPEND_SLASH设置

更多信息在Django的文档

或者你可以这样写你的url:

 (r'^login/?$', 'mySite.myUser.views.login') 

尾部斜杠后面的问号使得它在正则expression式中是可选的。 如果由于某些原因您不想使用APPEND_SLASH设置,请使用它。

@Michael Gendin的答案改善了这一点。 他的回答服务于具有两个单独URL的相同页面。 最好是login自动redirect到login/ ,然后将后者作为主页面:

 from django.conf.urls import patterns from django.views.generic import RedirectView urlpatterns = patterns('', # Redirect login to login/ (r'^login$', RedirectView.as_view(url = '/login/')), # Handle the page with the slash. (r'^login/', "views.my_handler"), ) 

我也有同样的问题。 我的解决scheme被放在我的正则expression式的结束行之前(| /)。

url(r'^artists/(?P[\d]+)(|/)$', ArtistDetailView.as_view()),

我有同样的问题。 在我的情况下,它是从静态文件之前的urls.py中的一些旧版本剩余的剩余:

 url(r'^%s(?P<path>.*)$' % settings.MEDIA_URL.lstrip('/'), 'django.views.static.serve', kwargs={'document_root': settings.MEDIA_ROOT}), 

MEDIA_URL是空的,所以这个模式匹配了一切。