解决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文件的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
上一篇: 胡斯战争:第一次全欧战争
推荐阅读
-
IE8下载文件时无法调用迅雷怎么办?IE8浏览器无法用迅雷下载问题的解决办法介绍
-
Python遍历zip文件输出名称时出现乱码问题的解决方法
-
解决django 多个APP时 static文件的问题
-
修复 Django migration 时遇到的问题解决
-
vue-resource post数据时碰到Django csrf问题的解决
-
Vue2.0使用axios引入本地JSON文件时遇到的问题及解决
-
解决加载WEB页面时,由于JS文件引用过多影响页面打开速度的问题
-
linux安装mysql5.7.22配置文件my.cnf配置细节及修改密码时出现的问题解决
-
mpvue编译时出现“未找到入口app.json文件问题解决
-
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案