2012-08-06 8 views
5

Quiero hacer que un archivo PDF en mi directorio de proyecto sea descargable en lugar de abrirlo en el navegador cuando un usuario hace clic en el enlace.python - haciendo que el archivo se pueda descargar

que siguieron a esta pregunta Generating file to download with Django

Pero estoy de error:

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 

he creado un enlace de descarga:

<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 

la línea de error es:

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

¿Cómo puedo hacer que sea descargable?

Gracias!

ACTUALIZACIÓN

Se está trabajando en Firefox pero no en Chrome v21.0.

Respuesta

5

Tiene una = adicional en esa línea, lo que hace que la sintaxis no sea válida. Debe ser

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

(Tenga en cuenta que teniendo dos = no significa necesariamente que sea válido:. foo = bar = 'hello' es perfectamente válido, pero en ese caso, tanto la izquierda como a medio plazo son nombres En su versión, el término medio es un literal, que no puede ser asignado a.)

+0

Ahora se elimina el error. Pero el archivo aún no se puede descargar. Simplemente se abre en el navegador. – rnk

+0

Pruebe con un navegador diferente. –

+0

Y actualice su pregunta – Willian

3

utilizar el siguiente código y debe descargar el archivo en lugar de abrirlo en una nueva página

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 
Cuestiones relacionadas