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实现的二维码生成小软件
Jul 11 Python
python进阶教程之词典、字典、dict
Aug 29 Python
Python调用命令行进度条的方法
May 05 Python
在Django中同时使用多个配置文件的方法
Jul 22 Python
python实现机械分词之逆向最大匹配算法代码示例
Dec 13 Python
Anaconda2 5.2.0安装使用图文教程
Sep 19 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
Sep 05 Python
Python生成器next方法和send方法区别详解
May 30 Python
Python通过fnmatch模块实现文件名匹配
Sep 30 Python
python Xpath语法的使用
Nov 26 Python
OpenCV-Python模板匹配人眼的实例
Jun 08 Python
pandas中对文本类型数据的处理小结
Nov 01 Python
python 模块重载的五种方法
Apr 24 #Python
写一个Python脚本自动爬取Bilibili小视频
python实现图片批量压缩
Apr 24 #Python
如何用python绘制雷达图
两行代码解决Jupyter Notebook中文不能显示的问题
python基础详解之if循环语句
Apr 24 #Python
解决jupyter notebook图片显示模糊和保存清晰图片的操作
You might like
用php写的serv-u的web申请账号的程序
2006/10/09 PHP
PHP获取当前所在目录位置的方法
2014/11/26 PHP
Zend Framework动作助手FlashMessenger用法详解
2016/03/05 PHP
PHP基本语法实例总结
2016/09/09 PHP
PHP类相关知识点实例总结
2016/09/28 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
2017/01/17 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
PHP7 其他修改
2021/03/09 PHP
IE和Firefox在JavaScript应用中的兼容性探讨
2008/04/01 Javascript
JavaScript RegExp方法获取地址栏参数(面向对象)
2009/03/10 Javascript
为原生js Array增加each方法
2012/04/07 Javascript
解决遍历时Array.indexOf产生的性能问题
2012/07/03 Javascript
基于jquery的时间段实现代码
2012/08/02 Javascript
根据选择不同的下拉值出现相对应的文本输入框
2013/08/01 Javascript
javascript的渐进增强与平稳退化浅谈
2013/11/12 Javascript
laytpl 精致巧妙的JavaScript模板引擎
2014/08/29 Javascript
返回顶部按钮响应滚动且动态显示与隐藏
2014/10/14 Javascript
JS自定义选项卡函数及用法实例分析
2015/09/02 Javascript
JS实现左右无缝轮播图代码
2016/05/01 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
2017/02/14 Javascript
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
Vue微信项目按需授权登录策略实践思路详解
2018/05/07 Javascript
JS实现马赛克图片效果完整示例
2019/04/13 Javascript
js实现翻牌小游戏
2020/07/31 Javascript
Python 模拟购物车的实例讲解
2017/09/11 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
python八皇后问题的解决方法
2018/09/27 Python
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
python实现计数排序与桶排序实例代码
2019/03/28 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
python的Jenkins接口调用方式
2020/05/12 Python
中药专业毕业自荐书范文
2014/02/08 职场文书
幼儿园迎国庆65周年活动策划方案
2014/09/16 职场文书
解除劳动合同通知书范本
2015/04/16 职场文书
六年级作文之预言作文
2019/10/25 职场文书