You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DEBUG=False时cPanel部署的Django项目静态与媒体文件无法显示求助

解决cPanel上Django项目DEBUG=False时静态/媒体文件失效问题

1. 修正settings.py配置

基础配置调整

DEBUG = False
# 替换为你的实际域名,生产环境禁止用*
ALLOWED_HOSTS = ['yourdomain.com', 'www.yourdomain.com']

静态文件配置

确保路径匹配cPanel实际目录(替换yourcpanelusername为你的cPanel用户名):

STATIC_URL = '/static/'
# 静态文件收集目录,需放在public_html下以便Apache直接访问
STATIC_ROOT = '/home/yourcpanelusername/public_html/static/'
# 取消注释,指向项目本地的static文件夹(如果存在)
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

媒体文件配置

MEDIA_URL = '/media/'
# 建议放在public_html外,提升安全性
MEDIA_ROOT = '/home/yourcpanelusername/media/'

2. 调整urls.py(适配生产环境)

当DEBUG=False时,Django自带的static()助手不再生效,需修改路由逻辑:

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('pages.urls')),
    path('', include('portfolio.urls')),
    path('', include('services.urls')),
    path('', include('blog.urls')),
]

# 仅在开发环境(DEBUG=True)加载静态/媒体路由
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

3. cPanel后台关键设置

部署静态文件

  • 登录cPanel,进入终端或通过SSH连接,运行命令收集静态文件:
python manage.py collectstatic
  • 确保public_html/static文件夹权限设为755,内部文件权限设为644。

配置媒体文件访问

生产环境Django不处理媒体文件,需通过Apache别名映射:

  1. 进入cPanel的Apache Configuration -> Include Editor
  2. 选择Pre Virtual Host Include,添加以下配置(替换yourcpanelusername):
Alias /media/ "/home/yourcpanelusername/media/"
<Directory "/home/yourcpanelusername/media/">
    Require all granted
    Options Indexes FollowSymLinks
</Directory>
  1. 保存后,Apache会自动重启生效。

关于Whitenoise的使用

如果不确定是否已安装,检查settings.py的INSTALLED_APPS和MIDDLEWARE中是否有Whitenoise相关配置。若要启用:

  1. 安装依赖:
pip install whitenoise
  1. 修改settings.py:
# 在INSTALLED_APPS顶部添加
INSTALLED_APPS = [
    'whitenoise.runserver_nostatic',
    'django.contrib.staticfiles',
    # 其他应用...
]

# 在MIDDLEWARE中添加(放在SecurityMiddleware之后)
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    # 其他中间件...
]

# 添加静态文件存储配置
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
  1. 重新运行collectstatic即可,媒体文件仍需通过上述Apache别名配置处理。

4. 最后检查

  • 确认所有路径为cPanel的绝对路径,无拼写错误
  • 测试静态文件(如yourdomain.com/static/css/main.css)和媒体文件(如yourdomain.com/media/avatar.jpg)是否能正常加载
  • 确保ALLOWED_HOSTS仅包含你的域名,禁止使用*

内容的提问来源于stack exchange,提问作者Bedirhandd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 04:20:36