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

本文作者:温茶又折花

本文链接: https://www.cnblogs.com/dyfblogs/p/14961351.html

转载文章请注明作者和出处,谢谢!
原文地址:https://www.cnblogs.com/dyfblogs/p/14961351.html