Django debug为True时,css加载失败的解决方案
作者:8316AND8317 发布时间:2022-05-07 01:17:53
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上最受欢迎的方法,确实简单快捷!
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/u011268406/article/details/103542625


猜你喜欢
- pycharm是个很不错的python开发工具,大大缩短了python项目的创建时间以及调试时间在使用python写脚本一段时间后,想尝试使
- 本文实例讲述了Python实现读写sqlite3数据库并将统计数据写入Excel的方法。分享给大家供大家参考,具体如下: src
- 在学会了抓包,接口请求(如requests库)和Selenium的一些操作方法后,基本上就可以编写爬虫,爬取绝大多数网站的内容。在爬虫领域,
- 前言:问题分析:在进行数据库查询的时候,我们都知道索引可以加快数据查询的效率。但是在实际的业务场景下,经常会遇到即使在表中增加了索引,但是同
- 此代码适合你做网站用,普通朋友可以不用理这个东西!ASP:<%dim objXMLHTTP, qq, pwd qq = &
- 本文实例讲述了python求pi的方法,是一篇翻译自国外网站的文章,分享给大家供大家参考。具体实现方法如下:#_*_ coding=utf-
- 简介:pycharm 是一款功能强大的 Python 编辑器,具有跨平台性。下载地址第一步:下载pycharm 软件下载时会有两个版本供选择
- myisam_max_[extra]_sort_file_size足够大 delay_key_write减少io,提高写入性能 bulk_i
- 1.定义ResNet残差模块一个block中,有两个卷积层,之后的输出还要和输入进行相加。因此一个block的前向流程如下:输入x→卷积层→
- 我们知道PL/SQL程序中运行SQL语句是存在开销的,因为SQL语句是要提交给SQL引擎处理这种在PL/SQL引擎和SQL引擎之间的控制转移
- 本文实例讲述了Python通过递归遍历出集合中所有元素的方法。分享给大家供大家参考。具体实现方法如下:''''
- 0、干货先写在前1、前端传值的数据必须使用JSON.stringify()传化2、后端,通过request.body接收数据,直接使用jso
- 我有两个继承一个基类的Django模型:- Request- Inquiry- Analysis请求有两个外键到内置用户模型。create_
- 一、打开摄像头import cv2import numpy as npdef video_demo(): capture = c
- 在进行特征工程、划分数据集的工作中,drop()函数都能派上用场。它可以轻松剔除数据、操作列和操作行等。drop()详细的语法如下:删除行是
- 前言用过Django的小伙伴都知道,Django的ORM是自带的,比较特殊,而且集成了很多功能,比如数据库迁移… 何为ORM,个人之见解,简
- Jupyter Notebooks 是什么?Jupyter Notebooks 是一款开源的网络应用,我们可以将其用于创建和共享代码与文档。
- 大家在安装程序或下载文件时,通常都能看到进度条,提示你当前任务的进度。其实,在python中实现这个功能很简单,下面是具体代码。在实际应用中
- 今天我们来学习,如何使用有趣的自定义标记来布局页面。有的朋友可能有这样的疑问,自己随便定义的标记浏览器怎么能正确的认识呢?这里我们就要用到文
- 什么是迭代器能被 next 指针调用,并不断返回下一个值的对象,叫做迭代器。表示为Iterator,迭代器是一个对象类型数据。概念迭代器指的