解决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文件的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 使用PyCharm创建Django项目及基本配置详解

    pycharm是个很不错的python开发工具,大大缩短了python项目的创建时间以及调试时间 在使用python写脚本一段时间后,想尝试使用Django来编写一个python项目,现做以下记录备忘: 1.创建项目 如果本地没有安装与所选python版本对应Django版本,pycharm会自动下载相应的版本: 创建后运行项目,默认页面为http://127.0.0.1:8000/,打开后: 出现上面的页面,则正面项目创建成功 目录结构: 2.创建APP 在Django项目中可以包含多个APP

  • 详解django使用include无法跳转的解决方法

    一般的django项目我都喜欢采用以下的文件结构,使用include的方式,实现从总的url分配给apps里面的url Example: -projtect ---apps -----user -------urls.py -urls.py 但突然发现无法跳转,竟然是总url的这个错误! 以下是错误做法 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^', views.Index.as_view(), name='index'),

  • 解决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"

  • Django添加bootstrap框架时无法加载静态文件的解决方式

    项目结构如下: 开始时在setting.py中设置如下; html文件中的写法如下: 这样设置一直无法加载静态文件,只需要修改setting.py文件如下: 就可以加载到静态文件了. 补充知识:Django-项目上线后,静态文件配置失效以及404.500页面的全局配置 一.项目上线后静态文件失效 1.因为项目还没上线的时候,django会默认从setting.py中这个设置 STATIC_URL = '/static/' STATICFILES_DIRS = ( os.path.join(BAS

  • 快速解决Django关闭Debug模式无法加载media图片与static静态文件

    开发时,通常打开Debug模式会快速定位开发时的一些问题. 项目开始部署时,关闭Debug模式,url.py路由静态文件和图片写法: # url.py from django.views import static from django.conf import settings #路由静态文件和图片 urlpatterns = [ url(r'^static/(?P<path>.*)$', static.serve, {'document_root': settings.STATIC_ROO

  • 解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了

    1.今天网上下载一个博客项目,发现本地访问,js,css加载不了. 我想应该是项目上线的安全措施,但是我想调试项目.找到方法如下 在settings.py里面编辑 添加 STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'), ) 另外把 STATIC_ROOT = os.path.join(BASE_DIR, 'static') 改为 STATIC_ROOT = os.path.join(BASE_DIR, 'static1') 即这里面的s

  • 解决Django数据库makemigrations有变化但是migrate时未变动问题

    写models.py时缺少了一个 verbose_name,导致数据库出现问题,整了很久,摸索出重新建立数据库的方法: 首先删除每个app中的migrations中的除了init.py的文件,在数据库中清空所有的表,然后执行migrate,这时会自动生成系统默认的那些表,然后执行makemigrations,再执行migrate 如果只是众多应用中的一个出了问题的话,删除与之相关的表,然后进入django_migrations表中,将相应的app那项记录删除,然后再执行 makemigratio

  • 解决Django生产环境无法加载静态文件问题的解决

    起步 线上部署时因设置了 settings.DEBUG = False 会导致静态文件都是 404 的情况.主要原因是应为关闭DEBUG模式后,Django 便不提供静态文件服务了. runserver 的启动 如果运行是通过 runserver 命令的方式,那简单,在启动 runserver 指令后追加 --insecure 选项能参数强制 django 处理静态文件. 其他方式启动 但如果是通过 uwsgi 或 daphne 等启动的话,追加选项的方式就不管用了.要解决这个问题,我们要手动去

  • 解决Django部署设置Debug=False时xadmin后台管理系统样式丢失

    对于使用Django框架开发的系统,当部署时设置settings.py文件中Debug=False时xadmin后台管理系统样式会丢失. [问题原因]: django的生产环境不同开发环境,在生产环境下(DEBUG=False),django.contrib.staticfiles 是不起任何作用的,也就说 django.contrib.staticfiles 只对开发环境(DEBUG=True)开启.所以会导致xadmin样式丢失现象. [解决方案]: ①在settings.py中添加如下配置

  • 使用vue打包时vendor文件过大或者是app.js文件很大的问题

    第一次使用vue2.0开发,之前都是用的angular1.x.在使用vue-cli脚手架打包后(UI用的Element-ui),发现vendor文件很大,将近1M左右..后来翻阅资料才明白,原来webpack把所有的库都打包到了一起,导致文件很大. 我的解决办法: 1.把不常改变的库放到index.html中,通过cdn引入,比如下面这样: 然后找到build/webpack.base.conf.js文件,在 module.exports = { } 中添加以下代码 externals: { '

  • 解决django同步数据库的时候app models表没有成功创建的问题

    问题描述: 在django中创建了一个app,而且在app中自定义创建了几个数据表,在同步的时候系统自带的表可以成功,但是models中的没有生效,而且进入对应app下的migrations目录,发现为空,应该如何解决呢! 解决方式: python3 manage.py makemigrations --empty managerbook  # managerbook就是你的app名字,此处要写成自己的app名字 python3 manage.py makemigrations   # 再次正常

  • 解决Django删除migrations文件夹中的文件后出现的异常问题

    migrate文件记录了每一次数据迁移的改变 解决方法:重建数据库 1.删除数据库 错误方法: python manage.py shell from app.models import *Product.objects.raw('drop database') 上面删除数据库的方法是错误的 正确方法: 如果是用默认的sqlite数据库:可以直接右键,将db.sqlite3删掉. 如果用的其他数据库,则进入数据库的控制台,将数据库删掉 2.删除migrations中的文件,只保留__init__

随机推荐