Django URL // 多重斜杠被去掉(可能是Apache的问题)?
我有一个网址,它的格式是这样的:
('^(?i)somewhere/(\d+)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/$', somewherePage),
这个网址应该能匹配到像这样的链接:
http://foo.com/somewhere/1337/foo/params/that/are//maybe///used/
注意,有些参数缺失了,导致出现了//。这让它无法正常工作,现在我得到的链接变成了:
http://foo.com/somewhere/1337/foo/params/that/are/maybe/used/
在这个链接中,缺少了必要的斜杠,这样我的格式就无法被识别了。我觉得这可能是我的Apache网络服务器做了什么,但我不太清楚该怎么找出原因。
我想知道怎么才能防止多余的斜杠被去掉,或者有没有其他方法可以处理动态数量的参数。之前这段代码运行得很好,但现在却不行了。我不太确定发生了什么变化,因为这段代码是老旧的,但我知道这种传递可变数量参数的方法是有效的。
4 个回答
1
如果你想避免在网址中看到那些难看的GET参数,而且这个somewherePage
页面本身就知道会从前一个网址接收到不同数量的数据,你可以把解析网址的代码放到这个页面的代码里。
也就是说,可以把网址的格式改成这样:
('^(?i)somewhere/(\d+)/(.*)/$', somewherePage),
然后在你的页面代码开始的地方进行分割:
def somewherePage(request, somewhere_int, somewhere_pieces):
import string
the_pieces = string.split(somewhere_pieces, '/')
3
我在调试一个类似的问题时遇到了这个问题,跟Django有关。多出来的斜杠总是被nginx去掉。通过在nginx的配置中添加一个 merge_slashes off
的设置,问题就解决了。
4
有没有其他方法可以处理动态数量的参数?
有的,这个方法叫做查询字符串。与其使用复杂的方式,不如用一个简单的方式(一个能匹配必要参数的方式),然后把其他的参数放在?
后面,比如说example.com/foo/42?p1=foo&p2=bar
。这样你就可以从request.GET
中提取这些参数。