媒体文件未在 cpanel 上的 django 应用程序中提供

media files aren't serving in django app on cpanel

我在 cpanel 上有一个 django 应用 运行(我不确定这是否是我的问题 django 应用程序或 cpanel 服务器),当设置调试模式时 True。我可以看到所有的媒体文件,例如个人资料图片或pdf文件等。但是当设置调试模式False时,您无法在应用程序上看到媒体文件。这是我在 settings.py 文件上的配置。

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
    ]
STATIC_URL = '/static/'
STATIC_ROOT = '<app-directory>/public_html/static'

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

# Crispy Form Theme - Bootstrap 3
CRISPY_TEMPLATE_PACK = 'bootstrap3'

# For Bootstrap 3, change error alert to 'danger'
from django.contrib import messages
MESSAGE_TAGS = {
    messages.ERROR: 'danger'
}

要部署生产服务器,您需要设置 3 个东西

  1. 停用 DEBUG 配置:

DEBUG = False

这将禁用所有额外的开发功能。

  1. 在设置文件中定义一个静态根目录:

STATIC_ROOT = '/this/is/a/path/to/statics'

这表明所有静态文件应保存在何处。

  1. 运行收集所有静态文件的命令:

python manage.py collectstatic

这会将所有静态文件保存在 STATIC_ROOT

配置的目录中

官方部署文档: https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/#static-root-and-static-url

我还没有真正解决它,但您可以按照以下方法解决您的问题:

1 - 设置您的媒体和静态根目录:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "media")

2 - 在 cpanel 上激活您的虚拟环境,然后 运行 此命令:

python manage.py collectstatic

3 - 完成后,将在 cpanel 上您的应用程序的根目录下创建 2 个文件夹 “静态”和“媒体”文件夹将它们都复制到“public_html”目录

4 - 转到 cpanel 中的设置 python 应用并找到您的应用并重新启动它。

它会解决我的问题,但每次我上传一些图片时,我应该去将媒体文件复制到 public_html

我已经遇到这个问题 1 天了,但我找到了解决方案。您可以使用 pip:

安装这两个包 dj-static static3
$ pip install dj-static static3

然后更改您的 wsgi.py 文件,如下所示:

.
.
.
from dj_static import Cling
.
.
.
application = Cling(get_wsgi_application())