2014-02-05 129 views
0

我試圖創建一個鏈接,點擊後會從我的媒體文件夾中打開一個名爲tbh_wt_1.pdf的PDF文件。從媒體文件夾打開PDF文件Django

我已經試過: <a href="{{ MEDIA_URL}}workouts/tbh_wt_1.pdf"> PDF LINK</a>但我得到有「下載」,此代碼的PDF一個「找不到網頁錯誤」

我也試過:

fd = open(os.path.join(settings.MEDIA_ROOT, 'workouts/tbh_wt_1.pdf')) 
response = HttpResponse(fd, content_type='application/pdf') 
response['Content-Disposition'] = 'attachment; filename=tbh_wt_1.pdf' 
return response 

設置。 PY

MEDIA_ROOT = os.path.join(ROOT_DIR,'media/') 

MEDIA_URL = '/media/' 

但我得到的錯誤「的Adobe無法打開文件,原因是它不支持」

我很欣賞反饋和專業知識。

+0

您是否在settings.py中設置了MEDIA_URL和MEDIA_ROOT設置? – Tiago

+0

對於第一個,你確定該文件存在於該目錄中,並且MEDIA_URL中正在提供某些內容?對她來說,你似乎忘記了真正打開文件,你只是將路徑傳遞給HttpResponse。 –

+0

我知道該文件存在,因爲我可以將此文件附加到電子郵件。我已經在settings.py中包含了MEDIA_ROOT和MEDIA_URL。我還包括「開放」,但我仍然得到Adobe錯誤。 (不知道我是否在正確的地方打開)。我很感激幫助。 – bbrooke

回答

1

您不需要編寫任何視圖代碼來爲位於媒體目錄中的文件提供服務。你應該只設置變量MEDIA_URL和MEDIA_ROOT在您的settings.py:

# Absolute filesystem path to the directory that will hold user-uploaded files. 
# Example: "/var/www/example.com/media/" 
MEDIA_ROOT = os.path.join(ROOT_DIR,'media') 

# URL that handles the media served from MEDIA_ROOT. Make sure to use a 
# trailing slash. 
# Examples: "http://example.com/media/", "http://media.example.com/" 
MEDIA_URL = '/media/' 

我認爲這個問題是在開發環境中發生,而不是在生產服務器。您應該將這些行添加到您的urls.py中,以便您的開發服務器在media /目錄下提供此文件。

from django.conf import settings 

urlpatterns += patterns('', 
    (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}), 
) 

這應該只被添加到urls.py用於開發目的。對於生產,您應該使用Web服務器(如Apache或Nginx)中內置的選項。

MEDIA_ROOT用於引用應該提供哪個目錄。 MEDIA_URL用於引用模板中的URL路徑。

+0

完美!我很欣賞反饋效果很好。 – bbrooke