解决django 多个APP时 static文件的问题
每个APP下都有自己的static文件夹,那如何设置将不会混用呢
以下是实例(我项目里有两个APP(login 和main))
1、首先在setting 文件修改配置路径
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "MGStudio", "static"),
os.path.join(BASE_DIR, "main", "static"),
os.path.join(BASE_DIR, "login", "static"),
]
2、在每个APP下的static下建立以APP名相同的文件夹
比如我在login/static/login/
放入样式JS CSS等
3、如何调用样式
{% static 'main/img/firefox-logo-small.jpg' %}
{% static 'login/img/name.png' %}
补充知识:Django项目上线后无法加载xadmin等的静态文件问题(django的settings中几个static设置项的关系)
多数是static的settings.py设置问题.
这里不设置好其他app的static你同样是加载不了
1.settings.py里面这样设置.
STATIC_URL = '/static/'
#这里注意不要和你项目static文件夹名一样,因为这个是用来存放收集来的所有静态文件的.
#如果你设置相同,等运行collectstatic时会警告.
STATIC_ROOT = os.path.join(BASE_DIR, 'static1')
# 我们的静态文件分开三个部分
# 这里我们设为三个路径
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
os.path.join(BASE_DIR, 'myapp', 'static'),
os.path.join(BASE_DIR, 'userapp', 'static'),
]
上面第一个为项目根目录下static.
下面两个是其他app的static,myapp,和userapp分别是你的其他app的名字
比如xadmin下有static,就应该加上
os.path.join(BASE_DIR, ‘xadmin’, ‘static’)
在urls里面设置(如果有多个在主urls设置)
from blog.settings import STATIC_ROOT
urlpatterns = [
url(r'^admin/', admin.site.urls),
# 添加静态文件的访问处理函数
url(r'^static/(?P<path .*)/$', serve, {'document_root': STATIC_ROOT}),
2.在项目目录下运行
python manage.py collectstatic
这时会把所有刚才你设置指定的static搜集到一个目录
3.在nginx里面设置static目录路径为刚才设置的static1
charset utf-8;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8997;
uwsgi_param UWSGI_SCRIPT blog.wsgi;
uwsgi_param UWSGI_CHDIR /home/wwwblog/myblog/;
}
location /static/ {
alias /home/wwwblog/myblog/static1/; #静态文件目录
}
下面是相关知识学习.
django的settings中几个static设置项的关系
django的settings中包含三个static相关设置项:
STATIC_ROOT STATIC_URL STATICFILES_DIRS
STATIC_URL 好理解,就是映射到静态文件的url,一般为/static/
STATICFILES_DIRS 是个列表,放各个app的static目录及公共的static目录
STATIC_ROOT 是总的static目录,可以使用命令自动收集static文件
更加详细的解释:
STATIC_ROOT:运行manage.py collectstatic后静态文件将复制到的目录。注意:不要把你项目的静态文件放到这个目录。这个目录只有在运行collectstatic时才会用到。我最开始想当然的以为这个目录和MEDIA_ROOT的作用是相同的,致使在开发环境下一直无法找到静态文件。
STATIC_URL:设置的static file的起始url,这个只可以在template里面引用到。这个参数和MEDIA_URL的含义差不多。
STATICFILES_DIRS:除了各个app的static目录以外还需要管理的静态文件位置,比如项目公共的静态文件差不多。和TEMPLATE_DIRS的含义差不多。
各个APP下static/目录下的静态文件django的开发服务器会自动找到,这点和以前APP下的templates目录差不多。
假设有个工程djangodemo,有两个app为demo1跟demo2
django处理static的方法是把各个app各自的static合并到一处
比如
djangodemo/djangodemo/static 放置公共静态文件
djangodemo/demo1/static 放置该app自己的静态文件
djangodemo/demo2/static 放置该app自己的静态文件
可以这么设置:
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
os.path.join(BASE_DIR, 'demo1', 'static'),
os.path.join(BASE_DIR, 'demo2', 'static'),
)
STATIC_ROOT = os.path.join(BASE_DIR, 'static1')
使用命令
python manage.py collectstatic
就会自动把所有静态文件全部复制到STATIC_ROOT(即static1)中
如果开启了admin或者(xadmin),这一步是很必要的,不然部署到生产环境的时候会找不到样式文件
以上这篇解决django 多个APP时 static文件的问题就是小编分享给大家的全部内容了,希望能给大家一个参考。
- 一则数据库无法重启的案例分析(r8笔记第96天)
- 最大公约数和最小公倍数及其应用(Go语言解法)
- JAVA private私有类的 默认构造函数 的生成过程
- 一次数据变更的审核过程(r8笔记第95天)
- JavaScript 学习一
- 与Ajax同样重要的jQuery(2)
- 寻找第K元素的八大算法、源码及拓展
- 索引优先队列-IndexedPrirotyQueue的原理及实现(源码)
- Java 集合系列02之 Collection架构
- 开发者需要掌握的JS事件
- Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例
- Kosaraju算法、Tarjan算法分析及证明--强连通分量的线性算法
- 关于curl网站运维与开发的那些事
- 并查集Union-find及其在最小生成树中的应用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- java中各种距离换算
- SAP Spartacus HttpParamsURIEncoder单元测试文件备份
- 微PE制作U盘启动盘,并安装Win10
- Angular单元测试如何只执行指定的测试用例,提高测试速度
- 院长智能部署Frp内网穿透---支持多系统
- dotnet OpenXML 元素 cNvPr NonVisual Drawing Properties 重复 id 标识处理
- Magicodes.IE之花式导出
- vue列表点击切换颜色
- JVM加载过程科普
- 我没学过计算机,是怎么接了四个私活还挣了两个 iPad 的?
- Helm安装Prometheus Operator
- 【每日一题】【vue2源码学习】vue如何检测数组的变化
- JavaScript 实现输入框内容一键复制(附上 Vue 3 实现方式)
- python 迭代器/iterator与生成器/generator的区别
- CSS 实现文本超出容器范围用省略号显示(单行+多行)