没有结尾斜杠的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是空的,所以这个模式匹配了一切。