Django静态文件的加载以及STATIC_ROOT 与STATICFILES_DIRS的区别

Djangon生产环境静态资源的处理

Django 关闭DEBUG模式后(即DEBUG=False),就相当于是生产环境了。

Django框架一旦作为生产环境,它的静态文件访问接口就不应该从Django框架中走,必须在Django框架前面部署nginx或者其他web服务器来提供静态访问入口

最佳配置方式

最佳的配置方式是将所有的App 下面的静态文件统一放置到一个目录(在项目目录下创建staticfiles文件夹)下面,然后将该目录设置为STATICFILES_DIRS,STATIC_ROOT则设置为另外的目录:

# 对外提供WEB访问时的URL地址
STATIC_URL = ‘/static/‘
# 开发阶段放置项目自己的静态文件,不能包含STATIC_ROOT路径,STATIC_ROOT 与 STATICFILES_DIRS的路径不能重复
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, ‘staticfiles‘),
)
# 执行collectstatic命令后会将项目中的静态文件(包括STATICFILES_DIRS、自带admin的静态文件)收集到该目录下面来(所以不应该在该目录下面放置自己的一些静态文件,因为会覆盖掉)
STATIC_ROOT = os.path.join(BASE_DIR, ‘static‘)

在开发阶段Django把/static 映射到django.contrib.staticfiles这个App,django.contrib.staticfiles自动地从STATICFILES_DIRS、STATIC_ROOT以及各个App的static子目录里面搜索静态文件。

一旦部署到生产环境上,settings.py不需要重新编写,只要在Nginx的配置文件里面写好映射,/static将会被Nginx处理。django.contrib.staticfiles虽然仍然存在,但因为不会接收到以/static/开始的路径,所以将不会产生作用。不必担心Django会使处理速度变慢。

当settings.DEBUG设置成False的时候,staticfiles将自动关闭。

汇集静态资源到指定目录

运行 python manage.py collectstatic 命令,将在开发模式中定义的静态目录,统一拿到STATIC_ROOT目录下,对外提供“/static”(STATIC_URL)为访问URL:

  1.首先从Django的扩展包中,将admin管理后台的jss 和css等静态文件拷贝到配置文件中的STATIC_ROOT目录下。

  2.然后将STATICFILES_DIRS 列表中所有目录下的内容也拷贝到STATIC_ROOT目录下

python manage.py collectstatic在执行时,django默认会去查看定义在STATICFILES_DIRS里的目录,以及在INSTALLED_APPS里定义了的app的static目录。如果这些目录下有文件,则把文件全部收集起来,拷贝到STATIC_ROOT目录下。

nginx配置如下:

server {
    listen         80;
    server_name    127.0.0.1
    charset UTF-8;
    access_log      /var/log/nginx/django_pro01_access.log;
    error_log       /var/log/nginx/django_pro01_error.log;
    client_max_body_size 75M;
    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8000;
        uwsgi_read_timeout 2;
    }
    # 在nginx中要单独做访问/static/目录的路由
    location /static {
        expires 30d;
        autoindex on;
        add_header Cache-Control private;
        alias /usr/share/nginx/django_pro01/static/;
     }
 }

所有静态文件都应该从“/usr/share/nginx/django_pro01/static/”这个目录中(也就是上面定义的STATIC_ROOT)获取。

参考:

https://www.cnblogs.com/shengulong/p/10322055.html

https://www.jianshu.com/p/a90680de19fb

原文地址:https://www.cnblogs.com/luodaxia/p/12098619.html

时间: 2024-08-02 10:15:54

Django静态文件的加载以及STATIC_ROOT 与STATICFILES_DIRS的区别的相关文章

django 中静态文件项目加载问题

问题描述: django项目中创建了多个app后,每个app中都有对应的static静态文件.整个项目运行时这些静态文件的加载就是一个问题,因为整个项目我只参与了一部分,项目部署之类的并没有参与.我写的部分的js代码遇到点问题,修改了相应的代码后整个项目没有按照我的设想改变. 解决: 在项目中执行 python manage.py collectstatic 该命令收集项目下的静态文件,统一保存到 项目配置文件下的STATIC_ROOT.以重新加载静态文件. 原文地址:https://www.c

Web 前端性能优化 : 如何有效提升静态文件的加载速度

作者:刘轶斌,腾讯应用开发 工程师商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处.原文链接:http://wetest.qq.com/lab/view/345.html 一.如何优化 用户在访问网页时, 最直观的感受就是页面内容出来的速度,我们要做的优化工作, 也主要是为了这个目标.那么为了提高页面加载(或者渲染)速度呢?一般来说有三个方面: 1.代码逻辑:优秀的代码逻辑结构可以有效减少渲染页面使用的内存和速度(比如虚拟DOM),此方面不在本文讨论范围内. 2.SSR服务器渲染,也

Eclipse中使用Tomcat加载项目在浏览器中访问的时候JS和CSS等静态文件无法加载的问题

首先,我的Eclipse是引用外部的Tomcat 引用外部Tomcat会在左侧生成一个Server文件夹,相当于复制了一份Tomcat到Eclipse的安装目录里 具体Tomcat所在目录可以在这进行查看 双击Tomcat服务,会打开一个窗口,然后点击Open launch configuration,可打开配置窗口,在这里可以查看到具体服务所在位置. 接下来步入正题,正如题目所说,Eclipse中使用Tomcat加载项目在浏览器中访问的时候JS和CSS等静态文件无法加载,如图 仔细看下路径,会

Web前端性能优化——如何有效提升静态文件的加载速度

一.如何优化 用户在访问网页时, 最直观的感受就是页面内容出来的速度,我们要做的优化工作, 也主要是为了这个目标.那么为了提高页面加载(或者渲染)速度呢?一般来说有三个方面: 1.代码逻辑:优秀的代码逻辑结构可以有效减少渲染页面使用的内存和速度(比如虚拟DOM),此方面不在本文讨论范围内. 2.SSR服务器渲染,也就是所谓的“直出”.将首屏所有内容在服务器端渲染成html静态代码后,直接输出给浏览器,可以有效加快用户访问站点时首屏的加载时间.不过此方面也不在本文讨论范围内. 3.提升静态文件的加

EasyUI Tabs + Yii2.0实现iframe方式打开页面(解决共用静态文件引入加载的问题)

在项目实际开发中,有将打开的各个链接页面隔离的需求(防止静态资源起冲突),这个时候常规思路就是使用iframe来实现!但遇到一个比较棘手的问题,当用easyui Tabs打开一个iframe页面时,怎么解决原有共用静态资源引入的问题.有人建议可以考虑将共用静态资源文件放到一个php文件中,然后每次渲染页面时加载即可,这个时候很多朋友会想到PHP的include()方式,但是每个iframe页面都要include一次,岂不是很麻烦.而且项目的要求是iframe打开和easyui tabs href

[django]django 在apache2上部署静态文件如何加载

首先找到apache2的conf文件下的httpd.conf,添加如下信息: Alias /static/ E:/wamp/Apache24/www/static/ <Directory E:/wamp/Apache24/www/static> Options FollowSymlinks AllowOverride none Require all granted </Directory> django 工程下setting中对应设置: # Static files (CSS,

ELF文件的加载过程(load_elf_binary函数详解)--Linux进程的管理与调度(十三)

日期 内核版本 架构 作者 GitHub CSDN 2016-06-04 Linux-4.6 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度-之-进程的描述 加载和动态链接 从编译/链接和运行的角度看,应用程序和库程序的连接有两种方式. 一种是固定的.静态的连接,就是把需要用到的库函数的目标代码(二进制)代码从程序库中抽取出来,链接进应用软件的目标映像中: 另一种是动态链接,是指库函数的代码并不进入应用软件的目标映像,应用软件在编译/链接阶段并

web站点优化之使用tengine搭建静态资源服务器和静态资源合并加载案例剖析

在一个项目还是单体架构的时候,所有的js,css,image都会在一个web网站上,看起来并没有什么问题,比如下面这样: 但是当web网站流量起来的时候,这个单体架构必须要进行横向扩展,而在原来的架构中静态资源这羊毛是出在单体架构这头羊身上,所以横向多少 个单体,就有多少个静态资源文件夹,比如下面这样的架构. 那这种架构有什么问题呢? 总的来说会有如下二个问题: 1.   浏览器对单一域名的请求有并发限制. 在同一个域名下,一般来说有js,css,img,media,html等等静态资源,如果资

Django静态文件输出

一直很纠结的一个问题,网络上也有很多方案,但总感觉不完美. 之前的方案 1 .  在setting.py中     STATIC_ROOT = 'static/'     STATIC_URL = 'static/'      2.  在模板页面中     <link rel="stylesheet" href="{{ STATIC_URL }}css/bootstrap.css">     <script type="text/java