Django URL没有尾部斜杠时不重定向

107 投票
9 回答
98325 浏览
提问于 2025-04-15 15:13

我有两个应用程序,分别在两台不同的电脑上。在电脑A的 urls.py 文件里,有一行代码是这样的:

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

这个网址可以同时访问 mySite.com/cast/mySite.com/cast。但是在电脑B上,我写了一个类似的网址:

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

奇怪的是,在电脑B上,访问 mySite.com/login/ 可以正常工作,但 mySite.com/login 却会卡住,无法像在电脑A上一样自动跳转到 mySite.com/login/。我是不是漏掉了什么?这两台电脑的 urls.py 文件看起来一模一样。

9 个回答

23

这个内容是对@Michael Gendin的回答的改进。他的回答是用两个不同的网址来提供同样的页面。其实更好的做法是让login自动跳转到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"),
)
223

或者你可以这样写你的网址:

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

在最后的斜杠后面加个问号,这样在正则表达式中就表示这个斜杠是可选的。如果你有某些原因不想使用 APPEND_SLASH 这个设置,就可以用这种方式。

122

检查一下你在settings.py文件里的APPEND_SLASH设置

在Django文档中可以找到更多信息

撰写回答