2011-02-11 24 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修復了這個問題。

相關問題