我目前正在尝试从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的文档非常少,所以我不得不问这个问题。
感谢和问候!
答案 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')