使用Python和web2py将URL替换为URL中的下划线

时间:2011-08-26 05:37:47

标签: python url web2py

在此代码中,我有一个'args'值,即'title.title',此值显示在我的网址中。

如何将网址读取为:“index.html / something_something”而不是现在如何显示,即:“index.html / something%20something”。

 def livesearch():
    '''Auto completes the search query'''
    partialstr = request.vars.partialstr
    query = db.listing.title.like('%'+partialstr+'%')
    titles = db(query).select(db.listing.ALL)
    items = []

    for title in titles:
        items.append(DIV(A(title.title, _id="resultLiveSearch", _href=URL('search', args='%s' % title.title))))

    return TAG[''](*items)

我试过制作它:

_href=URL('search', args='%s' % title.title.replace("%20","_")

我认为哪个会起作用,但事实并非如此,我做错了什么?我该如何解决这个问题?

谢谢。

2 个答案:

答案 0 :(得分:2)

%20是单个空格的替代,因此您应该将空格替换为下划线,然后再将其传递给URL

title.title.replace(' ', '_')

答案 1 :(得分:1)

阐述FB的答案:URL()在URL的args部分调用url lib.quote,它执行空间和其他特殊字符的%-escaping。 [\ w ./-]未引用。 (如果您在源代码中跟随,则会发生在gluon.html.URL中。)

使用生成的URL(即生成新请求的URL)时,args不加引号。因此(在您的情况下)像“foo bar”这样的标题将在URL中编码为foo%20bar,但在调用URL时在request.args中解码为“foo bar”。

当你进行自己的编码时(在这种情况下将“foo bar”更改为“foo_bar”),你会在request.args中得到“foo_bar”,并且需要自己进行解码。