2017-12-04 20 views
0

私はpdfにhtmlをレンダリングしようとしていますが、これはdjangoアクションとしてインクルードしていますが、何らかの奇妙な理由により、 some_attribute ''WSGIRequest'オブジェクトに 'some_attribute'属性がありません

私の見解は次のようになります。

class CreatePdf(ContextMixin, View): 
    def get_context_data(self, obj, request): 
     cxt = {'some_attribute': obj.some_attribute, 
       'today': date.today()} 
     return cxt 

    def create_pdf(self, some_template, some_dict={}): 
     template = get_template(some_template) 
     html = template.render(some_dict) 
     result = BytesIO() 
     pdf = pisa.pisaDocument(BytesIO(html.encode("ISO-8859-1")), result) 
     if not pdf.err: 
      return HttpResponse(result.getvalue()) 
     return None   

、すべてを呼び出し、すべての魔法を行うには目的を持っていたアクションは、次のようになります。

def get_pdf(self, obj, request): 
    pdf_view = views.CreatePdf() 
    pdf = pdf_view.create_pdf('templates/some_template.html', pdf_view.get_context_data(obj,request)) 
    return HttpResponse(pdf) 

私が使用していること、考えget_context_dataは、管理フィールドで選択したオブジェクトのフィールドを取得しますが、同じエラーが表示されているようです。

最後に、ではなく、少なくとも、私のadmin.pyに私が持っている:

class MyAdmin(admin.ModelAdmin): 
    actions = [get_pdf] 
+0

申し訳ありませんが、 'get_pdf'とは何ですか?どこから呼び出されていますか? –

+0

私は管理サイトから呼び出すアクションです。私は自分の投稿を編集しました。 – filtfilt

+0

これが解決策であるかどうかはわかりませんが、簡単な設定ベースの問題かもしれません。この質問、特に小さな設定ファイルの微調整だけである最初の答えを確認してください(Ken Mbuki氏による)https://stackoverflow.com/a/39519162/6857994 –

答えて

1

いくつかのエラーがここにあります。

ModelAdminアクションメソッドのシグニチャがself, obj, requestではなく、self, request, querysetであることが主なものです。だからあなたは間違った位置にリクエストを渡しているので、Djangoがエラーがないリクエストであると言っている理由を説明しています。

最後のパラメータはオブジェクトではなくクエリーセットであることにも注意してください。これは、チェックボックスが選択されているすべての項目に対して管理アクションが呼び出されたためです。したがって、クエリーセットを繰り返し処理し、各項目で何かを行う必要があります。あなたの行動がクエリーセットを作成しているときに、それをどのように動作させたいのかは分かりません。それはあなたがここで望んでいるものとは異なる行動であるかもしれません。

現在のところ、CreatePdfは実際にはビューではないので、私はなぜあなたがビュークラスから継承しているのかわかりません。オブジェクトから直接継承するだけでも動作します。しかし、代わりに、それを実際のビューにすることがあります。これはget_urls() methodで登録されています。

関連する問題