2011-01-07 66 views
2

在我的Django視圖我有這樣的事情:問題試圖通過URL作爲參數傳遞給Django視圖

(r'^addOtherItemsForUserAndEvent/(?P<eventId>\d+)/(?P<itemName>\w{0,100})/(?P<itemLink>\w{0,500})/$', 'gatherings.views.addOtherItemsForUserAndEvent'), 

def addOtherItemsForUserAndEvent(request, eventId, itemName, itemLink): 

這與我的urls.py在那裏我有這個相匹配

這樣做的目的是創建一個包含名稱和項目URL的項目,然後將該項目添加到事件中。我試圖通過ajax調用來使用它,它很有用,但很容易被破壞。

我的問題彈出,當我試圖通過一個實際的URL作爲這樣的項目鏈接:

http://127.0.0.1:8000/addOtherItemsForUserAndEvent/1/Pony/http://www.google.ca//

上面的例子應該創建一個名爲小馬的項目有鏈接到谷歌,但由於額外的「/」,它與我的網址不匹配。這似乎是我需要修改我的URL正則表達式,或者不知何故編碼的URL或傳遞它不同。

回答

0

您可能想要在最後一部分將URL正則表達式更改爲.{0,500} - \w不會與您的URL中的標點符號相匹配。

4

爲了解決多餘的斜線問題,您應該URL編碼您itemLink參數(即,通過它,在這個項目的asolute網址定義之前)

您可以使用Python的urllib庫做到這一點:

import urllib 
#when defining the absolute url in get_absolute_url() for example 
urllib.quote('http://www.google.ca/?q=django', safe='') 
# which will output 
>> 'http%3A%2F%2Fwww.google.ca%2F%3Fq%3Ddjango' 

需要空安全參數,或urllib的不編碼「/」 然後在你的視野解碼這一點,你中庸之道使用:

urllib.unquote(itemLink)