解决django多个app下的静态文件无法访问问题

django app说明

django app创建后需要创建template模板文件和static静态文件,但是在打包也需要在根目录有个static文件,还需要用到{% load static %}静态文件路径,因此需要配置三个位置。
但是如果你是一个template和一个static文件那就不需要了。

多个app下的静态文件配置解释(更详细解释见末尾):

  • STATIC_URL : 访问url
  • STATICFILES_DIRS: static的目录,app下的静态目录
  • STATIC_ROOT: static的根目录,也是打包的时候项目根目录

STATIC_URL 好理解,就是映射到静态文件的url,一般为/static/

STATICFILES_DIRS 是个列表,放各个app的static目录及公共的static目录

STATIC_ROOT 是总的static目录,可以使用命令自动收集static文件

配置

  1. 首先在setting 文件修改配置路径,加入三个配置
STATIC_URL = '/static/'
STATICFILES_DIRS = [
  os.path.join(BASE_DIR, "MGStudio(此处为app1)", "static"),
  os.path.join(BASE_DIR, "main(此处为app2)", "static"),
  os.path.join(BASE_DIR, "login(此处为app3)", "static"),
]
STATIC_ROOT = os.path.join(BASE_DIR, 'static1')
  1. 在每个APP下的static下建立以APP名相同的文件夹

比如我在login/static/login/(至于为何这样是因为方便后期打包静态文件),并放入样式JS CSS等

3、调用样式

{% load static %}   #头部加入
{% static 'main/img/firefox-logo-small.jpg' %}   #main为app名,需要把路径写到app层
{% static 'login/img/name.png' %}

说明

  1. 在项目目录下运行打包静态文件(需要设置 STATIC_ROOT)
 python manage.py collectstatic

这时会把所有刚才你设置指定的static搜集到一个目录

  1. 在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/; #静态文件目录
    }

更加详细的解释:

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目录差不多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值