2011-02-11 79 views
4

我有像这样一个模式的网址: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 Web服务器正在做的事情造成的,但我不知道如何解决这个问题。

我的问题是我怎样才能阻止额外的斜杠被删除或有另一种解决方案有动态数量的参数。此代码也用于正常工作,但意义已停止。由于代码库是遗留的,我不确定发生了什么变化,但我知道这种传递可变数量参数的方法已经奏效。

回答

4

是有其参数

是的,这就是所谓的查询字符串动态数另一种解决方案。而不是那种丑陋的模式使用更简单的模式(匹配所需参数的模式),并且在?之后通过所有其他事情。 example.com/foo/42?p1=foo&p2=bar。 然后,您可以从request.GET中提取它们。

+0

谢谢。这正是我要做的。几乎我发现的一切都表示,放置一堆///是一个糟糕的主意,所以我只是想继续解决它。 – 2011-02-11 23:14:36

0

导致额外//被删除的原因的答案是来自mod_rewrite Apache模块的一些命令。我已经决定修正我按照PiotrLegnica的建议创建网址的方式。

1

如果您想要避免GET参数的丑陋,并且由于此视图隐式知道期望从引用url返回可变数量的片段,您可以将url解析代码移入视图本身。

也就是说,作出这样的URL模式:

('^(?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修复了这个问题。

相关问题