Django Rest Framework - HTML рендерер сломан? - PullRequest
4 голосов
/ 02 июня 2019

В настоящее время я пытаюсь вернуть одну html-страницу из настроек моего django rest Framework:

@action(detail=True)
@renderer_classes((TemplateHTMLRenderer,))
def confirmation(self, request, *args, **kwargs):
    user = self.get_object()

    print(request.accepted_renderer) -> BrowsableAPIRenderer | WHY ?

    // do some business logic

    return Response({'user': user}, template_name='confirmation.html')

Но браузер печатает ошибку:

Object of type 'User' is not JSON serializable

Итак, мой вопрос, почему DRFиспользовать BrowsableAPIRenderer, когда я указал TemplateHTMLRenderer?

Кто-нибудь может мне помочь?

TemplateHTMLRenderer очень плохо документирован, поэтому мне пришлось задать этот вопрос ..

Спасибо и привет!

1 Ответ

5 голосов
/ 02 июня 2019

Кажется, что renderer_classes декоратор не работает должным образом с CBV. Во всяком случае, я нашел один обходной путь / DRF способ сделать это.

Переопределить метод get_renderers()

class Foo(viewsets.ModelViewSet):
    # your code
    <b>def get_renderers(self):
        if self.action == 'confirmation':
            return [TemplateHTMLRenderer()]
        else:
            return super().get_renderers()</b>

    @action(detail=True)
    def confirmation(self, request, *args, **kwargs):
        user = self.get_object()
        return Response({'user': user}, template_name='confirmation.html')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...