Django DEBUG=False后静态文件加载失败

我的环境是:Django2.2 + Python3.7

问题

将Django的DEBUG设置为False后,静态文件加载失败:报404

原因

Django的DEBUG设置为True,表示项目以调试方式运行,这种模式下程序出错后会在前端页面和后台报出对应错误,并且Django会自动搜索静态文件。设置DEBUG=False后,Django不会自动搜索静态文件,此时需要在ALLOWED_HOSTS里面添加程序所在的机器ip才能正常访问,并且Django会认为当前环境是生产环境,不在代理静态文件,自然也不会去搜索静态文件,程序运行需要加载静态文件时便会报404

解决方法

给静态文件设置路由以便于程序根据路由搜索静态文件。
1.在将DEBUG设置为False后,首先需要将程序所在机器的ip加入ALLOWED_HOSTS。

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False

ALLOWED_HOSTS = ["your_ip"]

2.在工程settings.py中设置静态文件路径,Django2.2下设置了STATIC_ROOT名字为static后,STATICFILES_DIRS中就不能再包含STATIC_ROOT的路径。

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static') # 新增
# STATICFILES_DIRS = [
#     os.path.join(BASE_DIR, 'static')
# ]

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

3.在urls.py中导入设置路由需要的模块并设置url路由。testDjango是创建的Django工程名。

from testDjango import settings 
from django.views import static
from django.conf.urls import url

urlpatterns = [
    url(r'^static/(?P<path>.*)$', static.serve, {'document_root': settings.STATIC_ROOT}, name='static'),
    url(r'^media/(?P<path>.*)$', static.serve, {'document_root': settings.MEDIA_ROOT}, name='media')
]

经过上面的设置后访问管理控制台xadmin页面会发现管理页面的静态文件加载失败,此时为了方便开发有两种处理方式:
1.将配置还原。
2.启动Django自带的服务时加上 --insecure

python3 manage.py runserver 0.0.0.0:8000 --insecure
posted @   温茶又折花  阅读(445)  评论(0编辑  收藏  举报
编辑推荐:
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
阅读排行:
· 趁着过年的时候手搓了一个低代码框架
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· 乌龟冬眠箱湿度监控系统和AI辅助建议功能的实现
点击右上角即可分享
微信分享提示