Django Request.GET和Unicode

时间:2019-06-17 13:49:14

标签: python django python-3.x unicode

如果它是unicode,如何解码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中以Unicode形式返回:

  

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

将此代码编码为utf-8会返回相同的值。

如何将%u041C%u043E%u0441%u043A%u0432%u0430转换为Москва或如何使用此unicode值过滤数据库数据?

2 个答案:

答案 0 :(得分:1)

对不起。问题不在Python中,而在我的JS代码中(escape()函数)。我将其替换为encodeURI()。

例如var url = "find_streets?city_name=" + encodeURI(cityName);

答案 1 :(得分:0)

如本文所建议:here

您可以使用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)

您能不能给我结果?