在此代码中,我有一个'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","_")
我认为哪个会起作用,但事实并非如此,我做错了什么?我该如何解决这个问题?
谢谢。
答案 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”,并且需要自己进行解码。