2012-02-27 21 views
9

Mam FileField w moim modelu django:jak pobrać plik FileField w widoku django

file=models.FileField(verbose_name=u'附件',upload_to='attachment/%Y/%m/%d',max_length=480) 

Ten plik zostanie wyświetlony na stronie z linku „http://test.com.cn/home/ projects/89/attachment/2012/02/24/sscsx.txt "

Co chcę zrobić, gdy użytkownik kliknie łącze pliku, pobierze plik automatycznie; Czy ktoś może mi powiedzieć, jak to zrobić w widoku?

Z góry dziękuję!

Odpowiedz

17

Można spróbować następujący kod, zakładając, że object_name jest przedmiotem tego modelu:

filename = object_name.file.name.split('/')[-1] 
response = HttpResponse(object_name.file, content_type='text/plain') 
response['Content-Disposition'] = 'attachment; filename=%s' % filename 

return response 

Patrz poniższa część dokumentacji Django na wysyłanie plików bezpośrednio: https://docs.djangoproject.com/en/dev/ref/request-response/#telling-the-browser-to-treat-the-response-as-a-file-attachment

+0

dziękuję działa – Angelia

+0

jak otrzymałeś object_name do tego widoku? z jakich parametrów adresów URL korzystałeś? – yretuta

+0

Nazwa_obiektu nie ma znaczenia, ponieważ po prostu reprezentuje obiekt modelu Django. Możesz odzyskać obiekt w dowolny sposób. –