Замена% 20 символами подчеркивания в URL с использованием Python и web2py - PullRequest
1 голос
/ 26 августа 2011

Внутри этого кода у меня есть значение 'args', которое равно 'title.title', это значение отображается в моем URL.

Как сделать так, чтобы URL читался так: "index.html / something_something«вместо того, как он теперь выглядит, а именно:« index.html / что-то% 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 ]

2 голосов
/ 26 августа 2011

%20 является заменой одного пробела, поэтому вы должны заменить пробелы подчеркиванием перед передачей их URL:

title.title.replace(' ', '_')
1 голос
/ 26 августа 2011

Обработка ответа FB: URL () вызывает url lib.quote в части args вашего URL, которая выполняет% -экранирование пробелов и других специальных символов.[\ w ./-] не указаны.(Если вы отслеживаете источник, это происходит в gluon.html.URL.)

Когда используется полученный URL-адрес (то есть URL-адрес, генерирующий новый запрос), аргументынекотируемый.Таким образом (в вашем случае) заголовок, такой как "foo bar", будет закодирован как foo% 20bar в URL, но затем декодирован как "foo bar" в request.args при вызове URL.

Когда вы делаете свою собственную кодировку (в этом случае изменяя «foo bar» на «foo_bar»), вы получите «foo_bar» в request.args и вам нужно будет выполнить свое собственное декодирование.

...