【问题标题】:Open PDF file from media folder Django从媒体文件夹 Django 打开 PDF 文件
【发布时间】:2014-02-06 03:22:07
【问题描述】:

我正在尝试创建一个链接,当单击该链接时,它将从我的媒体文件夹中打开一个名为 tbh_wt_1.pdf 的 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 无法打开文件,因为它不受支持”

感谢您的反馈和专业知识。

【问题讨论】:

  • 你在settings.py中设置了MEDIA_URL和MEDIA_ROOT设置了吗?
  • 对于第一个,您确定该文件存在于该目录中,并且在 MEDIA_URL 上提供服务吗?对于她来说,您似乎忘记了实际打开文件,您只是将路径传递给 HttpResponse。
  • 我知道该文件存在,因为我可以将此文件附加到电子邮件中。我已经从 settings.py 中包含了我的 MEDIA_ROOT 和 MEDIA_URL。我还包括“打开”,但我仍然收到 adobe 错误。 (不确定我是否在正确的地方打开)。感谢您的帮助。

标签: django pdf


【解决方案1】:

您无需编写任何视图代码即可为媒体目录中的文件提供服务。您应该在 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 路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 2013-12-06
    • 2018-12-17
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多