2011-08-26 55 views
1

在此代碼中,我有一個'args'值'title.title',該值顯示在我的URL中。使用Python和web2py替換URL中下劃線的%20

我該如何讓url如下所示:「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

%20是一個空白的替代品,所以你應該將它們傳遞給URL之前替換下劃線空間:

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

在FB的回答闡述:URL()調用上的URL lib.quote args部分的URL,它執行%空格和其他特殊字符的轉義。沒有引用[\ w ./-]。 (如果你在源代碼中,這發生在gluon.html.URL中。)

當使用生成的URL(即,它是生成新請求的URL)時,參數不加引號。所以(就你的情況而言),像「foo bar」這樣的標題將在URL中被編碼爲foo%20bar,但當URL被調用時,在request.args中被解碼爲「foo bar」。當你做自己的編碼(在這種情況下,將「foo bar」改爲「foo_bar」),你會在request.args中得到「foo_bar」,並且需要自己進行解碼。

+0

很好的解釋,謝謝JLundell :) – Jarrod