当前位置:  开发笔记 > 编程语言 > 正文

没有尾部斜杠的django网址不会重定向

如何解决《没有尾部斜杠的django网址不会重定向》经验,为你挑选了3个好方法。

我在两台独立的计算机上安装了两个应用程序.在计算机A上,在urls.py文件中我有如下行:

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

该网址将会对工作都mySite.com/cast/mySite.com/cast.但是在计算机上有一个类似的URL写出来像:

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

出于某种原因,在计算机B上url mySite.com/login/将会工作但是mySite.com/login会挂起并且不会mySite.com/login/像计算机A那样直接返回.是否有我遗漏的东西?这两个url.py文件看起来都和我一样.



1> Michael Gend..:

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

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

尾部斜杠后的问号在regexp中使其成为可选项.如果由于某些原因您不想使用APPEND_SLASH设置,请使用它.


如果您使用Django创建RESTful API,那么当开发人员将数据直接发送到端点URL时,这可能是一个很好的解决方案.当使用`APPEND_SLASH`时,如果他们意外地发送它而没有斜杠,并且你的urlconf是带有斜杠的,那么在重定向POST请求时他们会得到关于数据丢失的异常.
非常确定您不希望出于搜索引擎优化的原因这样做 - 更好地重定向到规范的URL而不是具有两个有效的URL.
叫我天真 - 但为什么这个答案没有得到一百万的赞成票和django常见问题?
这个解决方案的问题在于你在2个url下使用相同的页面(有和没有尾随的`/`) - 草率,对于爬虫来说不好,更难维护,更难迁移到新系统(因为它很容易俯瞰)

2> Jiaaro..:

检查APPEND_SLASHsettings.py文件中的设置

更多关于django文档的信息


"当设置为True时,如果请求URL与URLconf中的任何模式都不匹配且不以斜杠结尾,则会向相同的URL发出HTTP重定向并附加斜杠.请注意,重定向可能会导致在POST请求中提交的任何数据都将丢失." "APPEND_SLASH设置仅在安装CommonMiddleware时使用......".我更喜欢Michael Gendin的解决方案.
如果您在urlpatterns的最后一个条目中使用其他“全部捕获” URL,则此方法不起作用。即使在这些情况下,@ speedplane的答案也将起作用。但是,当然,这比较简单,如果没有“全部捕获” urlpattern条目,则应使用它。

3> speedplane..:

这改善了@Michael Gendin的答案.他的回答是使用两个单独的URL提供相同的页面.最好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"),
)

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有