我有一个突然停止工作的观点。显然有些事情必须改变,但我不知道是什么。
视图应该返回一个pdf文件(即内容处置是附件) 当调用视图时,浏览器会尝试下载pdf,但无论它总是0字节。
我在这里和那里记录调试问题所在。我可以看到,当从generate_pdf返回响应对象时,它具有正确的内容。不知怎的,在那里和客户端浏览器之间,它就会消失。
有人有什么想法吗?
django 1.3,nginx,uwsgi
views.py
def get(self, request, *args, **kwargs):
...
return generate_pdf(request, 'ps_pdfbase.html', context_dict, returned_file_name)
generate_pdf函数
...
myfile = StringIO()
result_obj = pisa.CreatePDF(file_data, myfile)
logging.debug('pdf result_obj:\n\tsize:%s\n\terr:%s\n\tlog:%s\n\ttext:%s' % (myfile.tell(),
result_obj.err,
result_obj.log,
result_obj.text, ))
myfile.seek(0)
response = HttpResponse(myfile, mimetype='application/pdf')
logging.debug('response content: %s' % response.content)
response['Content-Disposition'] = 'attachment; filename=' + slugify(returned_file_name) + '.pdf'
return response
答案 0 :(得分:1)
正如一种替代方法尝试创建响应,然后将其直接传递给比萨?
response = http.HttpResponse(mimetype='application/pdf')
response['Content-Disposition'] = 'attachment; filename=%s' % filename
pisa.CreatePDF(file_data, response)
return response
您决定不通过Nginx X-Accel-Redirect保存文件并提供服务吗? - 为了完整起见,这是一个例子:
Django观点:
resp = http.HttpResponse()
resp['Content-Type'] = 'application/pdf'
resp['Content-Disposition'] = 'attachment; filename=filename.pdf'
resp['X-Accel-Redirect'] = '/xaccel_path/%s' % relative_path_to_file
return resp
nginx config:
server {
...
location /xaccel_path {
internal;
alias /path/to/protected/files/;
}
}