Есть ли простой способ переопределить DjangoJSONEncoder.ensure_ascii
и установить его на False
или вывести текст без ascii в django.http.JsonResponse
любым другим способом?
Создание UTF-8 JsonResponse в Django
Ответ 1
EDIT:
Или, если вы используете формат utf-8, используйте вместо Django JsonResponse():
return HttpResponse(json.dumps(response_data, ensure_ascii=False), content_type="application/json")
или
return JsonResponse(json.dumps(response_data, ensure_ascii=False), safe=False)
подробнее о safe=False
ЗДЕСЬ
OLD:
Вам не нужно что-либо менять.
Хотя Django создает данные JSON в ASCII (от UTF-8), Javascript автоматически расшифровывает его обратно в UTF-8.
Ответ 2
Чтобы поддерживать совместимость JsonResponse и обратно, мы добавили/внедрили/внедрили его в django-compat. Возможно, это помогает кому-то сейчас или в будущем...
Ответ 3
Я еще не нашел лучшего способа использовать уже установленную REST Framework:
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticatedOrReadOnly
from rest_framework.response import Response
from .models import INITIATOR_TYPES
@api_view(['GET'])
@permission_classes((IsAuthenticatedOrReadOnly, ))
def initiator_types(request):
data = {t[0]: str(t[1]) for t in INITIATOR_TYPES}
return Response(data)
Но мне это не очень нравится. Это намного сложнее, чем JsonResponse
: fooobar.com/questions/20508/...
Ответ 4
from django.core.serializers.json import DjangoJSONEncoder
from django.http import JsonResponse
class MyJsonResponse(JsonResponse):
def __init__(self, data, encoder=DjangoJSONEncoder, safe=True, **kwargs):
json_dumps_params = dict(ensure_ascii=False)
super().__init__(data, encoder, safe, json_dumps_params, **kwargs)