• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Django debug为True时,css加载失败的解决方案

    django上线后,需要把setting.py文件的debug=True改为False,以防暴露代码报错问题。

    因为我项目用到css的地方只有admin管理员登陆这块,没有自定义的css等,所以我的css文件夹名称定义成static

    1.更改setting.py文件

    STATIC_URL=‘/static/‘
    STATIC_ROOT=os.path.join(BASE_DIR,'../static/')

    STATIC_URL是css的加载路径,项目中如果用到了css的地方,会沿着该路径寻找这个路径下的css文件

    STATIC_ROOT是存放所有的static文件,运行 python manage.py collectionstatic命令后,python会自动检索项目所有的目录,把static文件夹拷贝到STATIC_ROOT目录下。在部署的时候会用到。

    2.执行下述命令

    将所有的所有app下(包括Django自带的)static目录下的文件复制到STATIC_ROOT目录下

    python manage.py collectionstatic

    3.修改nginx配置文件

    添加下述代码到nginx配置文件中

    location /static {
        alias /Users/admin/PythonProject/static;
        break;
        }  

    server结果如下

    server{
            listen 8011;
            server_name localhost;
            rewrite ^/$/ break;
            location /static {
                alias /Users/admin/PythonProject/static;
                break;
            }    
            location /{
                proxy_pass http://127.0.0.1:8000;
            } 
    } 

    作用如下:当一个请求(例如,登陆请求 http://127.0.0.1:8011/admin/)通过nginx转发时,会首先到下面的location中,被转发到8000端口,调用Django项目中的admin登陆接口,登陆接口里面会请求两个css文件,分别是

    http://127.0.0.1:8011/static/admin/css/login.css

    http://127.0.0.1:8011/static/admin/css/base.css

    这两个请求被上面的nginx配置中的第一个location匹配到,并且使用alias路径替换location路径,找到login.css文件和base.css文件。

    (注意:location后面配置的路径,如果是以 / 结尾,那么匹配后的路径将不会带匹配中的字段,不带 / 结尾,将会带着匹配中的字段,详细的就不再赘述了)

    这样,css文件就会被正确的加载上了。

    补充:Django项目关闭debug模式后,静态文件无法加载的解决办法

    近期在做OpenStack Horizon项目的相关开发,OpenStack的整体环境使用DevStack安装,horizon开发过程中直接使用命令:

    python manager.py runserver

    开启内置服务器,由于项目中local_settings.py文件中的DEBUG=True,进行开发和调试一直没什么问题。

    但是现在需要编写404,500等出错页面,在debug模式下出了错都会出现报错页面,无法转向到404或500页面,这时我将local_settings.py中的DEBUG设为false,这时候应该可以转向到404页面。

    实验证明确实如此,404和500页面都可以得到,但是出现了新的问题:css和js文件无法加载。

    在网上找了找,很快就找到了问题的原因:

    Django框架仅在开发模式下提供静态文件服务。

    当我开启DEBUG模式时,Django内置的服务器是提供静态文件的服务的,所以css等文件访问都没有问题,但是关闭DEBUG模式后,Django便不提供静态文件服务了。

    想一想这是符合Django的哲学的:这部分事情标准服务器都很擅长,就让服务器去做吧!

    OK,解决问题的办法也就出现了,我最开始想到的就是,使用项目正式部署是所使用的配置,由apache提供静态文件服务。不过解决问题的方法远不止一种,在stackoverflow上我发现了更有趣的方法。

    现在把自己总结的四种方法列在下面,共大家参考:

    1.将静态文件由apache提供文件服务(类似正式部署):

    编辑/etc/apache2/sites-available/horizon文件:

    #Alias /media /opt/stack/horizon/openstack_dashboard/static
    Alias /static /opt/stack/horizon/openstack_dashboard/static

    建立静态文件链接:

    ln -sv /opt/stack/horizon/openstack_dashboard/static /opt/stack/horizon

    重启apache:

    sudo service apache2 restart

    2.使用django.views.static.serve()方法

    在URLconf中添加:

    (r'^site_media/(?Ppath>.*)$', 'django.views.static.serve',{'document_root': '/path/to/media'}),

    官方文档中评价这种办法:“The big, fat disclaimer”。

    3.伪造404页面:

    使用正确的URL链接404页面模板;

    4.改变项目运行方式:

    python manage.py runserver --insecure

    最后这种是stackoverflow上最受欢迎的方法,确实简单快捷!

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

    您可能感兴趣的文章:
    • 解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
    • 解决django后台样式丢失,css资源加载失败的问题
    • 快速解决Django关闭Debug模式无法加载media图片与static静态文件
    • 解决Django生产环境无法加载静态文件问题的解决
    • Django静态文件加载失败解决方案
    上一篇:python 模块重载的五种方法
    下一篇:Python 如何保存json文件并格式化
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Django debug为True时,css加载失败的解决方案 Django,debug,为,True,时,css,