媒体文件未在 DEBUG=False Django 2.2.6 中显示

Posted

技术标签:

【中文标题】媒体文件未在 DEBUG=False Django 2.2.6 中显示【英文标题】:Media Files not shown in DEBUG=False Django 2.2.6 【发布时间】:2020-04-12 23:31:45 【问题描述】:

在调试模式下一切正常,但在调试 id false 时无法在生产环境中显示媒体文件

这是我的设置

TEMPLATES = [
    
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [TEMPLATES_DIR,],
        'APP_DIRS': True,
        'OPTIONS': 
            'context_processors': [
                'django.template.context_processors.request',
                'django.template.context_processors.debug',
                'django.contrib.auth.context_processors.auth',
                'django.template.context_processors.csrf',
                'django.contrib.messages.context_processors.messages',
                'django.template.context_processors.static',
                'django.template.context_processors.media',
            ],
        ,
    ,
]

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.request",
    "django.core.context_processors.debug",
    "django.core.context_processors.auth",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
)

STATIC_DIR = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = [STATIC_DIR,]
STATIC_ROOT = os.path.join(BASE_DIR, 'staticroot')

# Media folder for database media
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

和项目网址

if settings.DEBUG:
    urlpatterns += static(
                        settings.STATIC_URL,
                        serve,
                        document_root=settings.STATIC_ROOT
                        )
    urlpatterns += static(
                        settings.MEDIA_URL,
                        serve,
                        document_root=settings.MEDIA_ROOT
                        )

虽然 url 链接路径使用模板标签完美显示

% load staticfiles %
<a href=" magazine.document.url " target="_blank">
      <i class='far fa-file-pdf'></i>
 </a>

希望您能帮助解决这个问题。

【问题讨论】:

您设置了网络服务器吗?当 DEBUG=False 时,静态文件不会进行 url 解析。通常在生产环境中,您的 nginx(或 Apache)服务器将是为您的静态资产提供服务的服务器。 @MattSeymour 不,我没有设置 Web 服务器 .. 我只是在我的 PC 上收集静态文件,所有静态文件都可以正常工作 .. 但是当调试模式为 False 时媒体文件不显示 .. 这是使用 cpanel 平台在我的托管服务器上出现同样的问题 cpanel的日志有错误吗?可能是权限问题。 @MattSeymour 我认为这与 cpanel 相关,因为.. 我现在尝试调试 True 它给了我 Raised by:django.views.static.serve .. 但是,对于媒体图像工作正常.. 这个仅适用于 PDF 文件的错误 当调试为真时,您将通过 urls.py 中的 if settings.DEBUG: 提供媒体文件。确实不建议在 DEBUG=True 时提供静态文件,也不应将其视为解决方案。问题出在您的 cpanel 配置中(我对此知之甚少)。可能值得在 cpanel 表单上重新表述您的问题,因为它不是特定于 django 的问题,而是配置问题。 【参考方案1】:

这是我的错 PDF 文件必须由第三方查看器下载或查看。对于调试模式,当调试为 False 时,我必须让 Apache 服务器正常工作...希望这有助于任何遇到同样问题的人

【讨论】:

以上是关于媒体文件未在 DEBUG=False Django 2.2.6 中显示的主要内容,如果未能解决你的问题,请参考以下文章

Apache Django 静态文件不提供 DEBUG=False [重复]

当 debug=false 时 Django 媒体文件不起作用

为啥当 Debug 设置为 False 时,Django 会为静态媒体生成 HTTP 500 错误?

Django 在 debug = False 时找不到我的媒体文件夹

当 Debug=False 时 Django Heroku 不提供静态文件

为啥 DEBUG=False 设置使我的 django 静态文件访问失败?