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&p2=bar
。
然后您可以从request.GET
中提取它们。
【讨论】:
谢谢。这正是我要做的。我发现的几乎所有内容都表明放置一堆 /// 是一个糟糕的主意,所以我将继续修复它。以上是关于django网页问题 url自动添加了斜杠的主要内容,如果未能解决你的问题,请参考以下文章