1

ListAPIView では、以下のように HTML と JSON をレンダリングするためのクラスをオーバーロードしようとしています。JSON レンダリングの場合、JSON 出力をレンダリングする Response に serializer.data を提供することが期待されます。HTML レンダリングの場合、HTML をレンダリングする Response の dict タイプとテンプレート名で context_data を提供することが期待されます。

レスト フレームワークの既存のコードを再利用するために、レスト フレームワークの既にシリアル化されたデータを抽出し、シリアル化されたデータとテンプレート名を使用して応答データを一度にオーバーロードします。結果は、提供されたデータが 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)

Response を拡張して、シリアライザ、dict 型のデータ、テンプレートをパラメータとしてオブジェクトを構築し、リクエスト形式を明示的に特定せずにライブラリを再利用できるようにするのはいかがでしょうか。ヒントや提案。

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)
4

1 に答える 1