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


Posted in Python onApril 24, 2021

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/(?P<path>.*)$', 'django.views.static.serve',{'document_root': '/path/to/media'}),

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

3.伪造404页面:

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

4.改变项目运行方式:

python manage.py runserver --insecure

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

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

Python 相关文章推荐
Python类的基础入门知识
Nov 24 Python
Python去除字符串两端空格的方法
May 21 Python
用Python实现斐波那契(Fibonacci)函数
Mar 25 Python
python使用os.listdir和os.walk获得文件的路径的方法
Dec 16 Python
Python装饰器知识点补充
May 28 Python
浅谈dataframe中更改列属性的方法
Jul 10 Python
Python爬虫文件下载图文教程
Dec 23 Python
详解Python3中ceil()函数用法
Feb 19 Python
对python3 Serial 串口助手的接收读取数据方法详解
Jun 12 Python
python游戏开发的五个案例分享
Mar 09 Python
深入浅析pycharm中 Make available to all projects的含义
Sep 15 Python
Python 使用dict实现switch的操作
Apr 07 Python
python 模块重载的五种方法
Apr 24 #Python
写一个Python脚本自动爬取Bilibili小视频
python实现图片批量压缩
Apr 24 #Python
如何用python绘制雷达图
两行代码解决Jupyter Notebook中文不能显示的问题
python基础详解之if循环语句
Apr 24 #Python
解决jupyter notebook图片显示模糊和保存清晰图片的操作
You might like
德劲1103二次变频版的打磨
2021/03/02 无线电
PHP实现驼峰样式字符串(首字母大写)转换成下划线样式字符串的方法示例
2017/08/10 PHP
php生成条形码的图片的实例详解
2017/09/13 PHP
Lazy Load 延迟加载图片的 jQuery 插件
2010/02/06 Javascript
一个简单的Ext.XTemplate的实例代码
2012/03/18 Javascript
jQuery如何实现点击页面获得当前点击元素的id或其他信息
2014/01/09 Javascript
为jQuery添加Webkit的触摸的方法分享
2014/02/02 Javascript
javaScript中push函数用法实例分析
2015/06/08 Javascript
Js类的静态方法与实例方法区分及jQuery拓展的两种方法
2016/06/03 Javascript
JS实现微信弹出搜索框 多条件查询功能
2016/12/13 Javascript
mockjs,json-server一起搭建前端通用的数据模拟框架教程
2017/12/18 Javascript
基于Vue开发数字输入框组件
2017/12/19 Javascript
ztree加载完成后显示勾选节点的实现代码
2018/10/22 Javascript
vue-router 前端路由之路由传值的方式详解
2019/04/30 Javascript
解决layui 三级联动下拉框更新时回显的问题
2019/09/03 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
JavaScript中如何对多维数组(矩阵)去重的实现
2019/12/04 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
2020/05/31 Javascript
React 条件渲染最佳实践小结(7种)
2020/09/27 Javascript
如何在VUE中使用vue-awesome-swiper
2021/01/04 Vue.js
同时安装Python2 &amp; Python3 cmd下版本自由选择的方法
2017/12/09 Python
深入浅析python 中的匿名函数
2018/05/21 Python
Python面向对象实现一个对象调用另一个对象操作示例
2019/04/08 Python
详解Pycharm与anaconda安装配置指南
2020/08/25 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
html5记忆翻牌游戏实现思路及代码
2013/07/25 HTML / CSS
HTML5页面中尝试调起APP功能
2017/09/12 HTML / CSS
乌克兰时尚鞋子和衣服购物网站:Born2be
2018/05/24 全球购物
戴森英国官网:Dyson英国
2019/05/07 全球购物
西班牙最大的婴儿用品网上商店:Bebitus
2019/05/30 全球购物
信息工程学院毕业生推荐信
2013/11/05 职场文书
财务工作者先进事迹材料
2014/01/17 职场文书
单位承诺书格式
2014/05/21 职场文书
党的群众路线教育实践活动对照检查材料思想汇报(党员篇)
2014/09/25 职场文书
2015年高中班级工作总结
2015/07/21 职场文书
2019最新公司租房合同(例文)
2019/07/18 职场文书