Django setting.py 中设置DEBUG=False后静态文件无法加载为什么会这样?
其实是因为:当我们在开发django应用时如果设置了 DEBUG = True,那么django便会自动帮我们对静态文件进行路由;但是当我们设置DEBUG = False后,这一功能便没有了,'django.contrib.staticfiles'
会关闭,即Django不会自动搜索静态文件,静态文件不能加载导致的问题有两个,想要让静态文件正常显示,我们就需要配置静态文件服务了
当然了也有别的方式解决
一、
runserver 的启动
如果
运行是通过 runserver 命令的方式,那简单,在启动 runserver 指令后追加 --insecure 选项能参数强制 django 处理静态文件
二、配置静态文件服务Django自身处理静态文件
首先修改项目的setting.py文件
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_URL = '/media/'
# 设置上传文件的路径
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
static中的静态文件:
url.py中加入
from django.contrib.staticfiles.views import serve #static静态文件
def return_static(request, path, insecure=True, **kwargs):
return serve(request, path, insecure, **kwargs)
urlpatterns = [
url(r'^static/(?P<path>.*)$', return_static, name='static'), # 添加这行
]
解释一下:我在url.py中写的return_static()的作用是代替 server() 为什么?以下是server()源码
def serve(request, path, insecure=False, **kwargs):
if not settings.DEBUG and not insecure:
raise Http404
server()默认情况下 insecure=False ,并且在关闭调试模式后都是 404。通过写个 return_static 函数其实与 --insecure 的选项是异曲同工的。
媒体文件的处理:
url.py中加入
from django.views.static import serve as static_serve # media媒体文件:注意这里引入的与上面的不同
urlpatterns = [
url(r'^media/(?P<path>.*)$', static_serve, {'document_root': settings.MEDIA_ROOT}),
]
完整的url.py代码:
这是总路由里的 不是APP应用整的url
from django.conf import settings
from django.conf.urls import url, include
from django.contrib import admin
from imserver import urls
from django.contrib.staticfiles.views import serve #static
from django.views.static import serve as static_serve # media注意这里引入的与上面的不同
def return_static(request, path, insecure=True, **kwargs):
return serve(request, path, insecure, **kwargs)
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include(urls)),
url(r'^static/(?P<path>.*)$', return_static, name='static'),
url(r'^media/(?P<path>.*)$', static_serve, {'document_root': settings.MEDIA_ROOT}),
]
三、
最后也是我推荐的就是nginx啦
在配置文件中设置参考下面的就行用root会和alias稍许不同
location /static {
expires 30d;
autoindex on;
add_header Cache-Control private;
alias /home/dh/PycharmProjects/python/SecondSpace/static;
}
location /media {
expires 30d;
autoindex on;
add_header Cache-Control private;
alias /home/dh/PycharmProjects/python/SecondSpace/media;
}
来源:CSDN
作者:西奥斯
链接:https://blog.csdn.net/h18208975507/article/details/103491119