From ecee6f8177ddb83fc326c666bec654077c1980d4 Mon Sep 17 00:00:00 2001 From: Terence Honles Date: Wed, 30 May 2018 12:03:00 -0700 Subject: [PATCH] apply fix from #58 to _SpecRenderer (#130) * apply fix from #58 to _SpecRenderer * Use JSONRenderer instead of HTML --- src/drf_yasg/renderers.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/drf_yasg/renderers.py b/src/drf_yasg/renderers.py index 8aeb3f8..ecc66a8 100644 --- a/src/drf_yasg/renderers.py +++ b/src/drf_yasg/renderers.py @@ -1,5 +1,5 @@ from django.shortcuts import render, resolve_url -from rest_framework.renderers import BaseRenderer, TemplateHTMLRenderer +from rest_framework.renderers import BaseRenderer, JSONRenderer, TemplateHTMLRenderer from rest_framework.utils import json from drf_yasg.openapi import Swagger @@ -10,7 +10,7 @@ from .codecs import VALIDATORS, OpenAPICodecJson, OpenAPICodecYaml class _SpecRenderer(BaseRenderer): """Base class for text renderers. Handles encoding and validation.""" - charset = None + charset = 'utf-8' validators = [] codec_class = None @@ -22,6 +22,12 @@ class _SpecRenderer(BaseRenderer): def render(self, data, media_type=None, renderer_context=None): assert self.codec_class, "must override codec_class" codec = self.codec_class(self.validators) + + if not isinstance(data, Swagger): + # if `swagger` is not a ``Swagger`` object, it means we somehow got a non-success ``Response`` + # in that case, it's probably better to let the default ``TemplateHTMLRenderer`` render it + # see https://github.com/axnsan12/drf-yasg/issues/58 + return JSONRenderer().render(data, media_type, renderer_context) return codec.encode(data)