【问题标题】:Problem trying to pass url as a parameter to a django view尝试将 url 作为参数传递给 django 视图时出现问题
【发布时间】:2011-06-05 11:12:49
【问题描述】:

在我的 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 调用来使用它,它有点工作,但很容易被破坏。

当我尝试像这样传递一个实际的 url 作为项目链接时,我的问题会弹出:

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

上面的示例应该创建一个名为 pony 的项目,并带有指向 google 的链接,但它与我的 url 不匹配,因为额外的“/”。看来我要么需要以某种方式修改我的 url 正则表达式,要么以某种方式对 url 进行编码或以不同的方式传递它......

任何帮助将不胜感激!

【问题讨论】:

    标签: django django-views django-urls


    【解决方案1】:

    要解决多余的斜线问题,您应该对 itemLink 参数进行 url 编码(即在传递它之前,在该项目的绝对 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)
    

    【讨论】:

      【解决方案2】:

      您可能希望在最后一部分将您的 URL 正则表达式更改为 .{0,500} - \w 不会匹配您 URL 中的标点符号。

      【讨论】:

        猜你喜欢
        • 2023-03-12
        • 2017-10-21
        • 1970-01-01
        • 1970-01-01
        • 2018-04-08
        • 2013-04-07
        • 1970-01-01
        • 1970-01-01
        • 2011-12-19
        相关资源
        最近更新 更多