从媒体文件夹Django打开PDF文件

时间:2014-02-05 18:33:46

标签: django pdf

我正在尝试创建一个链接,点击后会打开一个名为tbh_wt_1.pdf的Media文件夹中的PDF文件。

我试过了: <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

Settings.py

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

MEDIA_URL = '/media/'

但我收到错误“Adobe无法打开文件,因为它不受支持”

我很感谢反馈和专业知识。

1 个答案:

答案 0 :(得分:2)

您无需编写任何视图代码即可为媒体目录中的文件提供服务。您应该在settings.py中设置变量MEDIA_URL和MEDIA_ROOT:

# 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路径。