Django QueryDict Как сделать так, чтобы "плюс" не исчезал в QueryDict?

Как сделать так, чтобы "плюс" не исчезал в QueryDict?

Я пытаюсь разобрать полученный get-запрос на дикту:

from urllib.parse import quote_plus

my_non_safe_string = "test=1+1" # This example, the string can be anything. (in GET query format)
QueryDict(my_non_safe_string)
out: <QueryDict: {'test': ['1 1']}>

my_safe_string = quote_plus("test=1+1") # 'test%3D1%2B1'
out: <QueryDict: {'test=1+1': ['']}>

Я хотел бы получить следующий результат:

<QueryDict: {'test=1+1': ['1+1']}>

Вам необходимо процентное кодирование плюса, используя quote_plus вы также кодируете знак равенства (=) и поэтому QueryDict не может эффективно разобрать его:

my_safe_string = f'test={quote_plus("1+1")}'

это производит:

>>> from urllib.parse import quote_plus
>>> my_safe_string = f'test={quote_plus("1+1")}'
>>> QueryDict(my_safe_string)
<QueryDict: {'test': ['1+1']}>

Если неясно, содержит ли ключ какие-либо символы, которые должны быть экранированы, вы можете использовать:

key = 'test'
value = '1+1'
my_safe_string = f'{ quote_plus(key) }={ quote_plus(value) }'

Как насчет этого?

In [1]: from django.http import QueryDict

In [2]: from urllib.parse import quote_plus

In [3]: key = quote_plus("test=1+1")

In [4]: value = quote_plus("1+1")

In [5]: query_str = f"{key}={value}"

In [6]: QueryDict(query_str)
Out[6]: <QueryDict: {'test=1+1': ['1+1']}>
Вернуться на верх