• 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

    转载文章请注明作者和出处,谢谢!
  • 相关阅读:
    android-layout-finder 在线生成findViewById
    Android 广播机制
    Android Service随笔
    新博客地址(https://minxin.github.io)
    angr学习(四)
    angr学习(三)
    angr学习(二)
    angr学习(一)
    android studio NDK开发方案
    python虚拟机
  • 原文地址:https://www.cnblogs.com/dyfblogs/p/14961351.html
Copyright © 2020-2023  润新知