关于Django setting.py 中设置DEBUG=False后静态文件无法加载

别等时光非礼了梦想. 提交于 2019-12-12 06:47:26

 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;
 }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!