尝试将url作为参数传递给django视图时出现问题

时间:2011-01-07 18:37:47

标签: django django-views django-urls

在我的django视图中,我有类似的东西:

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

这与我的urls.py匹配,我有这个:

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

这样做的目的是创建一个带有名称和项目URL的项目,然后将该项目添加到事件中。我试图通过ajax调用来使用它,它有点工作,但很容易被打破。

当我尝试将实际网址作为项目链接传递时,会弹出我的问题:

  

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

上面的示例应该创建一个名为pony的项目,其中包含指向google的链接,但由于额外的“/”,它与我的url不匹配。好像我需要以某种方式修改我的url正则表达式,否则以某种方式编码url或以不同的方式传递它....

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:4)

要解决额外的斜杠问题,你应该对你的itemLink参数进行url编码(也就是说,在传递之前,在此项目的asolute url定义中)

您可以使用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)

答案 1 :(得分:0)

您可能希望在上一部分中将网址正则结构更改为.{0,500} - \w与您网址中的标点符号不匹配。