Django Request.GET и Unicode - PullRequest
       5

Django Request.GET и Unicode

0 голосов
/ 17 июня 2019

Как я могу декодировать значение из request.GET, если оно в юникоде?

def find_streets(request, qs=None):
    city_name = request.GET.get('city_name')
    print(request.GET.get('city_name'))
    # %u041C%u043E%u0441%u043A%u0432%u0430
    # (Москва)
    qs = models.Streets.objects.values_list('street_name', flat=True).filter(city__city_name=city_name)

Если я фильтрую английское слово - я успешно получаю результаты, но если я фильтрую русское слово - результат будет пустым.Например, русское слово Москва возвращается из request.GET в юникоде как:

% u041C% u043E% u0441% u043A% u0432% u0430

Кодирование этого вutf-8 возвращает то же значение.

Как преобразовать %u041C%u043E%u0441%u043A%u0432%u0430 в Москва или как отфильтровать данные БД, используя это значение Unicode?

Ответы [ 2 ]

1 голос
/ 17 июня 2019

Извините. Проблема была не в Python, а в моем коде JS (escape-функция). Я заменил его на encodeURI ().

ех. var url = "find_streets?city_name=" + encodeURI(cityName);

0 голосов
/ 17 июня 2019

Как предлагается в этом посте: здесь

Вы можете использовать urllib как этот пример:

a = b'restaurant_type=caf\xc3\xa9'
urllib.parse.parse_qs(a.decode())
# > {'restaurant_type': ['café']}

В вашем случае это может быть:

def find_streets(request, qs=None):
    city_name_tmp = request.GET.get('city_name')
    city_name = urllib.parse.parse_qs(city_name.decode())
    qs = models.Streets.objects.values_list('street_name', flat=True).filter(city__city_name=city_name)

Не могли бы вы дать мне результат?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...