在 ListAPIView 中,我尝试重载类以呈现 HTML 和 JSON,如下所示。对于 JSON 渲染,期望为 Response 提供 serializer.data 来渲染 JSON 输出。对于 HTML 渲染,需要提供 dict 类型的 context_data 和模板名称,以便 Response 渲染 HTML。
为了重用 REST 框架现有代码,我尝试提取 REST 框架已经序列化的数据,并一次性使用序列化数据和模板名称重载响应数据。结果是 HTML 模板未按预期呈现,因为提供的数据不是 dict 类型。
class UserProfileList(generics.ListAPIView):
model = UserProfile
serializer_class = UserProfileSerializer
template_name = 'userProfile/list.html'
queryset = UserProfile.objects.all()
def list(self, request, *args, **kwargs):
response = super(generics.ListAPIView, self).list(request, *args, **kwargs)
return Response(response.data, template_name=self.template_name)
我想知道是否扩展 Response 以使用序列化程序、dict 类型的数据、模板作为参数构造对象,以便我们可以重用库而无需显式识别请求格式。任何提示或建议。
class UserProfileList(generics.ListAPIView):
model = UserProfile
serializer_class = UserProfileSerializer
template_name = 'userProfile/list.html'
queryset = UserProfile.objects.all()
def list(self, request, *args, **kwargs):
return Response(self.get_serilaizer(), self.get_context_data(), template_name=self.template_name)