Django Rest Framework - Html 渲染器坏了?

Django Rest Framework - Html renderer broken?

我目前正在尝试 return 我的 django rest 框架设置中的一个 html 页面:

@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

所以我的问题是,为什么当我指定 TemplateHTMLRenderer 时 DRF 使用 BrowsableAPIRenderer?

有人可以帮我吗?

TemplateHTMLRenderer 的文档非常少,所以我不得不问这个问题..

谢谢和问候!

renderer_classes 装饰器 似乎不能与 CBV 一起正常工作。无论如何,我找到了一种 workaround/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')