django网页问题 url自动添加了斜杠

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django网页问题 url自动添加了斜杠相关的知识,希望对你有一定的参考价值。

当前页面是http://127.0.0.1:8000/page?p=1,当我访问自己做的链接http<a href=problem?id=1010>Tempter 时,也页面跳转到了http://127.0.0.1:8000/problem/?id=1010,problem后面自动加上了斜杠,而其他类似的链接都不会加上斜杠,怎么解决呢

你把这个URL对应的urls.py里面那条映射定义语句贴上来。估计你在那个地方加了斜杠。正常情况下,浏览器首先查找/page这样的URL,如果找不到,再重定向到/page/这个URL. 参考技术A 我在 django 1.10 也碰到了这个问题, 明明提交的地址是 changepassword 执行时变成了
changepassword/
但改成其它的都可以, 网上找了不少资料, 我怀疑 django 自己有保留关键字, 对这些关键字会自动加上 / (算的上是 BUG)
所以临进的解决办法是避开

Django URL // 双斜杠被删除(可能是 Apache 的错)?

【中文标题】Django URL // 双斜杠被删除(可能是 Apache 的错)?【英文标题】:Django URL // double slash being dropped (Possibly Apache's fault)? 【发布时间】:2011-06-25 21:11:56 【问题描述】:

我有一个这样的 url:

('^(?i)somewhere/(\d+)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/$', somewherePage),

它应该在哪里获取如下 URL:

http://foo.com/somewhere/1337/foo/params/that/are//maybe///used/

请注意某些参数不存在并导致 //。这已经停止工作,而不是正确的网址,我得到的是:

http://foo.com/somewhere/1337/foo/params/that/are/maybe/used/

所需的斜线不存在,然后我的模式就无法识别。我认为这可能是由我的 apache 网络服务器正在做的事情引起的,但我不知道如何解决这个问题。

我的问题是如何阻止多余的斜线被删除,或者是否有另一种解决方案来获得动态数量的参数。此外,这段代码过去工作正常,但感觉停止了。由于代码库是遗留的,我不确定发生了什么变化,但我知道这种传递可变数量参数的方式是有效的。

【问题讨论】:

【参考方案1】:

在 Django 上调试类似问题后,我遇到了这个问题。由于 nginx,额外的斜线总是被丢弃。在 nginx 配置中添加 merge_slashes off 解决了这个问题。

【讨论】:

【参考方案2】:

如果你想避免 GET 参数的丑陋,并且由于这个 somewherePage 视图隐含地知道期望从引用 url 返回可变数量的片段,你可以将 url 解析代码转移到视图本身。

也就是说,让url模式像:

('^(?i)somewhere/(\d+)/(.*)/$', somewherePage),

并在视图的开头拆分它:

def somewherePage(request, somewhere_int, somewhere_pieces):
    import string
    the_pieces = string.split(somewhere_pieces, '/')

【讨论】:

【参考方案3】:

导致多余的 // 被删除的答案是来自 mod_rewrite Apache 模块的一些命令。我决定按照 PiotrLegnica 的建议修复创建 URL 的方式。

【讨论】:

【参考方案4】:

是否有另一种解决方案来获得动态数量的参数

是的,它被称为查询字符串。代替那种丑陋的模式,使用更简单的模式(匹配所需参数的模式),并在? 之后传递其他所有内容,例如example.com/foo/42?p1=foo&amp;p2=bar。 然后您可以从request.GET 中提取它们。

【讨论】:

谢谢。这正是我要做的。我发现的几乎所有内容都表明放置一堆 /// 是一个糟糕的主意,所以我将继续修复它。

以上是关于django网页问题 url自动添加了斜杠的主要内容,如果未能解决你的问题,请参考以下文章

如何在模板中删除 django URL 中的尾随斜杠?

Django - 从斜杠重定向到非斜杠

自动添加的 URL 末尾的 AFNetworking 斜杠

在两种不同的场景中,尾随斜杠在URL中扮演什么实际角色?

Django 在 OpenShift 上将斜杠附加到静态文件 URL

Django-rest-framework + React-Admin:URL 反斜杠问题