Как заменить пробелы в URL с параметром пути дефисом или подчеркиванием - PullRequest
1 голос
/ 21 января 2020

Извините, если этот Q не имеет смысла, но есть ли способ заменить пробелы дефисом в URL (только), используя параметр пути для его построения?

Мой сценарий такой:

У меня есть метод представления, как показано ниже:

from app.service import *

@app.route('/myapp/<search_url>',methods=['GET','POST'])
def search_func(search_url):
    print(search_url) // This prints 'hi-martin king' and i need to pass 'hi-martin king' to below with preserving space
    search_q = search(search_url) 
    return render_template('wordsearch.html',data=search_q['data'])
  • здесь search_url Я передаю из шаблона

У меня есть функция search, которая принимает search_url в качестве аргумента (def search(search_url): .....) и выполняет все операции (для ссылки), которые я импортировал из службы выше.

Теперь, когда я запускаю, у меня есть пример URL как,

....myapp/hi-martin%20king

Здесь я сохраняю место для выполнения запроса в базе данных (в дБ он хранится как martin king), но Я не хочу показывать то же самое в URL, вместо этого заменить его дефисом

У меня есть другой способ изменить все значения в базе данных (удалить пробелы, но это не подходящее решение для tmk)

ожидаемый o / p:

....myapp/hi-martin-king  (or with an underscore) ....myapp/hi-martin_king 

Здесь, как я могу сохранить пробелы для передачи его в качестве аргумента функции, и в то же время я хочу заменить только в URL? Возможно ли это?

Любая помощь приветствуется .... TIA

Ответы [ 2 ]

2 голосов
/ 28 января 2020

Строка с % при необходимости без кавычек , если вам нужна необработанная версия.

from werkzeug import url_unquote

url_unquote('hi-martin%20king')  # => 'hi-martin king'

Теперь у вас есть строка без кавычек, вы можете заменить пробелы либо дефисом, либо подчеркивание.

replace_character = '-'

def fix_string(s):
    return s.replace(' ', replace_character)

fix_string('hi-martin king')  # => 'hi-martin-king'
1 голос
/ 23 января 2020

Если вы хотите запросить вашу базу данных при сохранении пробелов, вы можете просто url-unescape их для запроса, используя urllib.parse.unquote и сохранить их экранированные в URL следующим образом:

import urllib.parse

from app.service import *

@app.route('/myapp/<search_url>',methods=['GET','POST'])
def search_func(search_url):
    unquoted_search = urllib.parse.unquote(search_url)
    search_q = search(unquoted_search) 
    return render_template('wordsearch.html',data=search_q['data'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...