0

ユーザーにコンピューターにダウンロードするように求める通常のルートを実行せずに、xhtml2pdf によって作成された pdf をサーバーに直接保存するスクリプトを作成しようとしています。Documents() は、保存しようとしているモデルであり、new_project および output_filename 変数は別の場所に設定されています。

            html = render_to_string(template, RequestContext(request, context)).encode('utf8')
            result = open(output_filename, "wb")
            pdf = CreatePDF(src=html, dest=results, path = "", encoding = 'UTF-8', link_callback=link_callback) #link callback was originally set to link_callback, defined below
            result.close()
            if not pdf.err:

                new_doc=Documents()
                new_doc.project=new_project
                new_doc.posted_by=old_mess[0].from_user_fk.username
                new_doc.documents = result
                new_doc.save()

この構成では、new_doc.save() に到達するとエラーが発生します: 'file' object has no attribute '_committed'

これを修正する方法を知っている人はいますか?ありがとう!

4

1 に答える 1

2

それをいじった後、私は実用的な解決策を見つけました。問題は、結果 (pdf) がまだ開いている間に新しいドキュメントを作成していなかったことです。

「+」をopen()に追加して、pdfファイルを書き込みだけでなく読み取りと書き込みに使用できるようにする必要がありました。

これにより、最初にpdfが別のフォルダー(ファイル)に保存されることに注意してください。それがアプリケーションにとって望ましい結果でない場合は、それを削除する必要があります。

            html = render_to_string(template, RequestContext(request, context)).encode('utf8')
            results = StringIO()
            result = open("Files/"+output_filename, "w+b")
            pdf = CreatePDF(src=html, dest=results, path = "", encoding = 'UTF-8', link_callback=link_callback) #link callback was originally set to link_callback, defined below

            if not pdf.err:
                result.write(results.getvalue())
                new_doc=Documents()
                new_doc.project=new_project
                new_doc.documents.save(output_filename, File(result))
                new_doc.posted_by=old_mess[0].from_user_fk.username

                new_doc.save()
            result.close()
于 2014-07-24T16:44:24.063 に答える