2014-02-05 157 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