为什么DRF TemplateHTMLRenderer需要与其他序列化程序不同的序列化程序输出?

时间:2018-07-11 07:59:08

标签: django-rest-framework

为了获得我的序列化程序的自定义HTML输出,我从TemplateHTMLRenderer开始。

但是,仅在我的ViewSet中设置renderer_classes = [TemplateHTMLRenderer]会产生错误,因为渲染器要求数据是字典,而不是ReturnList。

代码:

class ValidatedSerializer(serializers.ModelSerializer):
    # id = serializers.IntegerField(required=False)  # so that it shows at all

    class Meta:
        model = Validated
        exclude = ()


class ValidatedViewSet(viewsets.ModelViewSet):
    renderer_classes = [TemplateHTMLRenderer]

    queryset = Validated.objects.all()
    serializer_class = ValidatedSerializer

    def get_template_names(self):
        if self.action == 'list':
            return ['examples/validated_list.html']
        return ['examples/validated.html']

为什么这样?我的意思是,我目前正在通过以下方式“解决”此问题:

class MyTemplateHTMLRenderer(TemplateHTMLRenderer):

    def render(self, data, accepted_media_type=None, renderer_context=None):
        if isinstance(data, ReturnList):
            data = dict(data=data,
                        serializer=data.serializer.child
                        if isinstance(data.serializer, serializers.ListSerializer) else data.serializer)
        return super().render(data, accepted_media_type, renderer_context)

但是DRF为什么不这样做呢?我是否以非预期的方式使用TemplateHTMLRenderer?

0 个答案:

没有答案