Django Rest Framework-HTML渲染器损坏了吗?

时间:2019-06-02 13:09:02

标签: django templates django-rest-framework renderer details

我目前正在尝试从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的文档非常少,所以我不得不问这个问题。

感谢和问候!

1 个答案:

答案 0 :(得分:5)

这似乎是 renderer_classes装饰器 与CBV不能正常工作。无论如何,我发现了一种解决方法/ DRF方法。

覆盖 get_renderers() 方法

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

    @action(detail=True)
    def confirmation(self, request, *args, **kwargs):
        user = self.get_object()
        return Response({'user': user}, template_name='confirmation.html')