在Django视图函数中动态定义渲染器类

f8rj6qna  于 2023-08-08  发布在  Go
关注(0)|答案(2)|浏览(107)

如何根据某些条件在Djanog旧的API_view函数中定义renderer类?拥有这样的东西:

@api_view(['GET'])
def can_render_2_things(request):
    if some_comdition:
       renderer_classes = [PDFRenderer]
    else:
       renderer_classes = [JSONRenderer]

字符串

ogsagwnx

ogsagwnx1#

如果您要设置的renderer_classes列表中只有一个renderer类,您可以自己在request上设置属性accepted_rendereraccepted_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

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]

roqulrg3

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)

字符串

相关问题