2012-08-06 15 views
5

Chcę zrobić plik PDF w moim katalogu projektu, który ma być zrzucany, zamiast otwierania w przeglądarce, gdy użytkownik kliknie łącze.python - tworzenie pliku do pobrania

Śledziłem to pytanie Generating file to download with Django

Ale ja dostaję błąd:

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 

stworzyłem link do pobrania:

<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 

Linia Błąd jest:

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

Jak mogę to zrobić downloable?

Dzięki!

UPDATE

To działa w Firefox, ale nie w Chrome v21.0.

Odpowiedz

5

W tym wierszu znajduje się dodatkowy =, co powoduje, że składnia jest nieważna. Powinno być

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

(Zauważ, że posiadanie dwóch = niekoniecznie sprawiają, że nieważny. foo = bar = 'hello' jest całkowicie poprawny, ale w tym przypadku zarówno lewy i środkowy termin są nazwy w swojej wersji, środkowy termin jest dosłowne, które nie mogą być przypisane.)

+0

teraz usunięciu błędu. Ale plik nie jest jeszcze do pobrania. Po prostu otwiera się w przeglądarce. – rnk

+0

Spróbuj użyć innej przeglądarki. –

+0

Zaktualizuj pytanie – Willian

3

Użyj następującego kodu i należy go pobrać plik zamiast otworzyć go w nowej strony

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 
Powiązane problemy