2013-06-26 19 views
1

在ListAPIView中,我尝试重载用于呈现HTML和JSON的类,如下所示。对于JSON呈现,预计会提供serializer.data以响应呈现JSON输出。对于HTML呈现,预计会为响应呈现HTML提供字典类型和模板名称的context_data。用于渲染JSON和HTML的通用视图

要重新使用rest框架现有代码,我尝试提取其余框架已经序列化的数据,并一次性使用序列化数据和模板名称重载Response数据。由于提供的数据不是dict类型,结果是HTML模板未按预期呈现。

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) 

不知响应扩展到与串行器构造对象,在字典类型的数据,模板作为参数使我们可以重新使用该库,而不显式地标识请求的格式。任何提示或建议。

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) 
+0

你解决它以某种方式? – Daviddd

回答

1

在您的第一个版本中,您是否尝试过打印出response.data?毫无疑问,这不是一个字典,而是某种序列化的表示。也许是一个JSON字符串。如果你想把它作为模板上下文,你需要反序列化它。

您可能需要这样的事情,基于code in the ListModelMixin

self.object_list = self.filter_queryset(self.get_queryset()) 
serializer = self.get_serializer(self.object_list, many=True) 
return Response(serializer.data, template_name=self.template_name)