在Python和web2py中将URL中的%20替换为下划线

1 投票
2 回答
2451 浏览
提问于 2025-04-17 00:23

在这段代码里,我有一个叫做 '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 个回答

1

进一步解释一下FB的回答:URL()这个函数会对你网址中的参数部分进行处理,具体来说,它会用url lib.quote这个工具来把空格和其他特殊字符转换成%格式的表示。像[\w./-]这些字符是不会被转换的。(如果你在查看源代码,这个过程发生在gluons.html.URL里。)

当生成的URL被使用时(也就是它会发起一个新的请求),这些参数会被还原回原来的样子。所以在你的例子中,像“foo bar”这样的标题会在网址中显示为foo%20bar,但当这个网址被调用时,它会在request.args中被解码回“foo bar”。

如果你自己进行编码(比如把“foo bar”改成“foo_bar”),那么在request.args中你会得到“foo_bar”,这时你需要自己再进行解码。

2

这里的 %20 是用来表示一个空格的,所以在把内容放到 URL 之前,你应该把空格换成下划线。

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

撰写回答