2017-12-12 13 views
0

目標:リクエストパラメータに基づいてカスタムレンダラを使用する方法は?

を出力するのparamsでexport=csvを取って、すべてのエンドポイントがCSVはカスタムレンダラを使用して代わりにJSONデータのファイルと別のレンダラを設定する


すべてのビューのコードを変更していないように見えたがあります最も簡単な解決策:

class MyView(ListAPIView): 
    renderer_classes = (BrowsableAPIRenderer, CSVRenderer) 
    pagination_class = StandardPagination 
    serializer_class = MySerializer 
    ... 

CSVRendererチェックのURLが含まれている場合export=csvであるが、ファイルではなくCSV形式のプレーンテキストデータが得られる。 BrowsableAPIRendererを削除すると動作しますが、まだエンドポイントをexport=csvなしで動作させる必要があります。

レンダラーが呼び出される前にURLをチェックする方法はありますか?

これを実現するには、より良い方法をお勧めします。


編集:私のレンダラはdjangorestframeworkからCSVRendererです:

from rest_framework_csv import renderers as r 

class CSVRenderer(r.CSVRenderer): 
    pass 

EDIT2:StandardPaginationは単にrest_framework.pagination.PageNumberPagination

答えて

0

を見て価値があるかもしれないdjangorestframework-csvという名前のパッケージがあります。私はそれがあなたが達成しようとしていることを信じています。 Django Rest Framework documentationCSV rendering sectionの下にリストされています。

編集: StandardPaginationのコードを表示してください。 また、GETパラメータをformatとして試してください。 http://<domain>/<url to view>/?format=csv

編集:urls.py

from rest_framework_csv import renderers as r 
from rest_framework.generics import ListAPIView 
from rest_framework.renderers import BrowsableAPIRenderer 
from rest_framework.pagination import PageNumberPagination 

from .. import Account, AccountSerializer 


class PageNumberPagination2(PageNumberPagination): 
    page_size = 2 


class CSVRenderer(r.CSVRenderer): 
    pass 


class MyView(ListAPIView): 
    renderer_classes = (BrowsableAPIRenderer, CSVRenderer) 
    pagination_class = PageNumberPagination2 
    queryset = Account.objects.all() 
    serializer_class = AccountSerializer 

を私はパターンurl(r'^test/', MyView.as_view()),を追加しました: 私は、シリアライザとクエリセットは、私はあなたを持っていないと異なっていると、次のようにあなたのコードを複製しています。 /test/に行くと、閲覧可能な表示が得られ、/test/?format=csvのCSVファイルが表示されます。

これはあなたが持っているものと同等のセットアップで、URLの周りにformat_suffix_patternsを使用していないことを確認できますか?

+0

ありがとうございます。私のCSVRendererは既にこのライブラリからレンダラーを拡張していますが、同じ問題があります。これは基本的にurlパラメータに基づいて他のレンダラーを無視しています。 –

+0

拡張レンダラを提供してください。 –

+0

ええ、編集 –

関連する問題