Django生产环境静态文件无法加载问题求助
解决Django生产环境静态文件加载失败问题
针对你遇到的WARNING:django.request:Not Found: /static/admin/css/base.css及其他静态文件未找到的问题,结合你的配置和目录结构,以下是具体解决步骤:
1. 修正settings.py的静态文件配置
你的STATIC_ROOT指向了项目根目录的static/,但实际收集的静态文件存放在staticfiles/目录,这会导致collectstatic命令把文件放到错误位置。修改settings.py:
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
重新执行收集静态文件命令,确保包括admin在内的所有静态文件都被收集到正确目录:
python manage.py collectstatic
2. 修正Apache的静态文件Alias配置
当前Apache的Alias指向的是你自己的静态源文件目录static/,而非生产环境需要的收集后目录staticfiles/。修改httpd.conf和httpd-ssl.conf中的配置:
Alias /static/ "C:/Users/MyUser/Desktop/MyProject/staticfiles/" <Directory "C:/Users/MyUser/Desktop/MyProject/staticfiles"> Require all granted </Directory>
注意路径末尾的斜杠要保持一致,避免匹配错误。
3. 修复wsgi.py的配置错误
你的wsgi.py存在两处关键问题:
DJANGO_SETTINGS_MODULE配置错误:项目settings在MyProject2/目录下,应改为MyProject2.settings而非HaltScanner.settings- sys.path添加顺序错误:需先添加项目目录到PYTHONPATH,再导入settings,否则可能导致模块找不到
修正后的wsgi.py:
import os import sys # 先添加项目目录到PYTHONPATH sys.path.append(r'C:\Users\MyUser\Desktop\MyProject') os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'MyProject2.settings') from django.core.wsgi import get_wsgi_application from django.contrib.staticfiles.handlers import StaticFilesHandler from django.conf import settings if settings.DEBUG: application = StaticFilesHandler(get_wsgi_application()) else: application = get_wsgi_application() # 调试输出(可选保留) print("PYTHONPATH:", sys.path) print("Current Working Directory:", os.getcwd()) print("STATIC_ROOT:", settings.STATIC_ROOT)
4. 验证配置并重启服务
- 重启Apache服务,确保新的Alias配置生效
- 重启Waitress服务器,使用正确的命令:
waitress-serve --listen=127.0.0.1:8000 MyProject2.wsgi:application
(注意需指定MyProject2.wsgi,因为wsgi.py在MyProject2目录下)
额外检查点
- 确认
staticfiles/目录下存在admin/文件夹,包含css、js等静态文件(执行collectstatic后应自动生成) - 检查Windows路径权限:确保Apache进程有读取
staticfiles/目录的权限 - 确认DEBUG确实为False,Django在DEBUG=False时不会自动处理静态文件,完全依赖Apache或其他静态文件服务
内容的提问来源于stack exchange,提问作者TonWard
相关产品推荐
相关产品推荐

