0

CSV形式のリストビューでオブジェクトをダウンロードする簡単な方法を作成できるようにするために、ミックスインでクラスベースのビューを使用するDjangoドキュメントの例を採用しようとしていますが、惨めに失敗していて、実際には何がわかりません私は間違っています。

次のように定義されたビューがあります。

class MyObjectList(CSVResponseMixin,
                   MultipleObjectTemplateResponseMixin,
                   BaseListView
                   ):
    object_type = None
    def get_context_data(self, **kwargs):
        object_type = self.object_type
        ...some code...
        return context

    def render_to_response(self, context, **kwargs):
        if self.request.GET.get('format', '') == 'csv':
            return CSVReponseMixin.render_to_response(self, context, **kwargs)
        else:
            return MultipleObjectTemplateResponseMixin.render_to_response(self, context, **kwargs)

ミックスインは次のとおりです。

class CSVResponseMixin(object):
    def render_to_response(self, ctx, **kwargs):
        return self.HttpResponse.render_to_response(self.convert_to_csv(ctx), **kwargs)

    def conver_to_csv(ctx):
        return do_csv_magic(ctx)

ビューでurls.pyは次のように呼び出されます。

url(r'^list/foos/$',
    MyObjectList.as_view(object_type="someobject", model=models.MyModel),
    name="myobjects",
)

ただし、クエリなしでビューにアクセスしようとすると、?format=csvTypeError

Exception Value:  __init__() got an unexpected keyword argument 'request'
Exception Location: /usr/lib/python2.6/site-packages/django/views/generic/base.py in render_to_response, line 97

編集:私は質問にいくつかの詳細を追加し、これを別のアプローチで実装することになりましたが、それでも私が間違っていたことを知りたいです。

4

2 に答える 2

0

docsによるとrender_to_response、次の引数のみを取ります。template_name, dictionary, context_instance, mimetype

したがってFooResponseMixin、あなたが電話しているときに:

self.HttpResponse.render_to_response(self.mutilate_context(ctx), **kwargs)

その中で余分な引数を渡していますが、それは受け入れkwargsられrender_to_responseません。を削除する**kwargsか、必要なものだけを変数に割り当てて、受け入れられた引数に渡します。

于 2012-08-23T19:04:13.193 に答える
0

要するにやり過ぎです。ここであなたの意図が何であるかはわかりませんが、最善のアプローチは、あなたがやろうとしていることに最も近い一般的なビューを見つけて、単にそれを拡張することであることを学びましたviews.py. 例はたくさんありますが、 https://bitbucket.org/BerislavLopac/resume/src/d7cfcf9c370b/resume_app/myproject/web/views.pyで私のコードを確認してください。

于 2012-08-23T22:25:15.103 に答える