2012-08-06 51 views
5

我想在我的项目目录下创建一个PDF文件,而不是在用户点击链接时在浏览器中打开。python - 制作文件可下载

我跟着这个问题Generating file to download with Django

但我发现了错误:

Exception Type: SyntaxError 
Exception Value: can't assign to literal (views.py, line 119) 
Exception Location: /usr/local/lib/python2.7/dist-packages/django/utils/importlib.py in import_module, line 35 

我创建了一个下载链接:

<a href="/files/pdf/resume.pdf" target="_blank" class="btn btn-success btn-download" id="download" >Download PDF</a> 

urls.py:

url(r'^files/pdf/(?P<filename>\{w{40})/$', 'github.views.pdf_download'), 

views.py:

def pdf_download(request, filename): 
    path = os.expanduser('~/files/pdf/') 
    f = open(path+filename, "r") 
    response = HttpResponse(FileWrapper(f), content_type='application/pdf') 
    response = ['Content-Disposition'] = 'attachment; filename=resume.pdf' 
    f.close() 
    return response 

错误行是:

response = ['Content-Disposition'] = 'attachment; filename=resume.pdf' 

我怎样才能使它downloable?

谢谢!

UPDATE

它工作在Firefox,但无法在Chrome v21.0。

回答

5

您在该行中有额外的=,这使得语法无效。它应该是

response['Content-Disposition'] = 'attachment; filename=resume.pdf' 

(请注意,有两个=不一定使其无效:foo = bar = 'hello'是完全有效的,但在这种情况下,左边和中间项是名字在你的版本中,中期是文字,不能分配给。)

+0

现在,故障排除后,打开它的文件。但该文件尚未下载。它只是在浏览器中打开。 – rnk 2012-08-06 14:37:17

+0

尝试其他浏览器。 – 2012-08-06 14:39:14

+0

并更新您的问题 – Willian 2012-08-06 14:45:38

3

使用下面的代码,它应该下载,而不是在一个新的页面

def pdf_download(request, filename): 
    path = os.expanduser('~/files/pdf/') 
    wrapper = FileWrapper(file(filename,'rb')) 
    response = HttpResponse(wrapper, content_type=mimetypes.guess_type(filename)[0]) 
    response['Content-Length'] = os.path.getsize(filename) 
    response['Content-Disposition'] = "attachment; filename=" + filename 
    return response