如何根据某些条件在Djanog旧的API_view函数中定义renderer类?拥有这样的东西:
@api_view(['GET']) def can_render_2_things(request): if some_comdition: renderer_classes = [PDFRenderer] else: renderer_classes = [JSONRenderer]
字符串
ogsagwnx1#
如果您要设置的renderer_classes列表中只有一个renderer类,您可以自己在request上设置属性accepted_renderer和accepted_media_type。这将导致使用正确的渲染器:
renderer_classes
request
accepted_renderer
accepted_media_type
@api_view(['GET']) def can_render_2_things(request): if some_comdition: renderer = PDFRenderer() else: renderer = JSONRenderer() request.accepted_renderer = renderer request.accepted_media_type = renderer.media_type
字符串但如果你想设置更多渲染,这不是很有用,我建议你简单地使用基于类的视图而不是基于函数的视图,并使用APIView:
APIView
from rest_framework.views import APIView class CanRender2Things(APIView): def get(self, request, format=None): if some_comdition: self.renderer_classes = [PDFRenderer] else: self.renderer_classes = [JSONRenderer]
型
roqulrg32#
在Django文档中,你可以使用不同的response对象:
from django.http import FileResponse, JsonResponse @api_view(['GET']) def can_render_2_things(request): if some_comdition: response = FileResponse(open('myfile.png', 'rb')) else: response = JsonResponse({'foo': 'bar'}, encoder=myJsonEncoder)
2条答案
按热度按时间ogsagwnx1#
如果您要设置的
renderer_classes
列表中只有一个renderer类,您可以自己在request
上设置属性accepted_renderer
和accepted_media_type
。这将导致使用正确的渲染器:字符串
但如果你想设置更多渲染,这不是很有用,我建议你简单地使用基于类的视图而不是基于函数的视图,并使用
APIView
:型
roqulrg32#
在Django文档中,你可以使用不同的response对象:
字符串