为了获得我的序列化程序的自定义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?