事关Django的静态资源目录设置(Django的setting.py中的三句静态资源(static)目录设置语句分别是什么作用?)
在Django的setting.py中常见的三句静态资源(static)目录设置语句如下:
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
下面介绍这三句话的作用。
首先说第1句和第2句:
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
要明白这两句话的作用,那首先要搞清楚Django在加载HTML模板文件时对于静态文件的查找是怎么样的。
Django在加载HTML模板文件时对于静态文件的查找分为两种情况:
这两种情况根据是否执行了下面这条语句来区分:
python manage.py collectstatic
第01种-没有执行命令python manage.py collectstatic
的情况
在这种情况下,Django在加载HTML模板文件时对于静态文件的查找是按下面的顺序来进行的:
-
各个应用的
static
目录:
Django 会首先查找每个应用中的static
目录,这是默认的静态文件存放位置。每个应用通常都有一个static
目录,用于存放该应用的静态文件。如果你在应用中创建了这样的目录,Django 将会在其中查找相应的静态文件。 -
STATICFILES_DIRS
中的静态文件:
如果在各个应用的static
目录中找不到所需的静态文件,Django 将在STATICFILES_DIRS
指定的目录列表中进行查找。这些目录通常包括应用中的static
目录以及其他自定义的静态文件目录。 -
Django提供的默认静态文件:
Django 在运行时也会提供一些默认的静态文件,例如admin
应用的静态文件。这些文件通常不需要你手动收集,Django 会自动处理。
这种情况下,没有集中存放静态文件,而是直接在各个应用的 static
目录中查找。这在开发阶段是方便的,但在生产环境中通常会通过执行 python manage.py collectstatic
来将静态文件集中存放到一个目录,以提高性能和更好地组织静态文件,于是便产生了第2种情况。
第02种-执行命令python manage.py collectstatic
的情况
当运行 python manage.py collectstatic
命令时,Django 会从各个应用的 static
目录以及 STATICFILES_DIRS
指定的目录中收集静态文件,并将它们复制到 STATIC_ROOT
指定的目录下。注意:复制的时候会把相应的目录结构也复制上,而不只是静态文件哈。这样做的目的是为了在生产环境中集中存放所有静态文件,以便于 Web 服务器更有效地提供它们。
执行命令 python manage.py collectstatic
后,Django在加载HTML模板文件时对于静态文件的查找则变成了下面的顺序来进行了(注意:此时与第1种情况的顺序有很大的区别了):
-
STATIC_ROOT
中的静态文件:
Django 会首先查找STATIC_ROOT
目录中是否存在所需的静态文件。这是因为STATIC_ROOT
是用于收集所有静态文件的根目录,它们都被复制到这个目录下。 -
STATICFILES_DIRS
中的静态文件:
如果在STATIC_ROOT
中找不到所需的静态文件,Django 将在STATICFILES_DIRS
指定的目录列表中进行查找。这些目录通常包括应用中的static
目录以及其他自定义的静态文件目录。 -
各个应用的
static
目录:
如果在以上步骤中都找不到所需的静态文件,Django 将在各个应用的static
目录中查找。每个Django应用通常都有一个static
目录,用于存放该应用的静态文件。
当你在模板文件中引用静态文件时,Django 使用{% static %}
模板标签来生成对应的 URL。这个标签会首先查找STATIC_ROOT
,然后是STATICFILES_DIRS
,最后是各个应用的static
目录。
读懂了上面对“Django在加载HTML模板文件时对于静态文件的查找”的两种情况的介绍,相信您就知道了下面两句设置语句的作用了:
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
接下来说下面这条语句的作用:
STATIC_URL = '/static/'
这句话只有在Django的HTML模板中使用了如下的模板语言时才有作用:
{% static 'css/my_style.css' %}
当jango的HTML模板中使用了上面的模板语言,并在HTML模板文件的开头处写上了下面这条语句时:
{% load static %}
那么此时{% static 'css/my_style.css' %}
中的static就作为是静态文件的路径前缀了,如果此时 STATIC_URL 的值用下面这条语句设定为'/mystatic/'
:
STATIC_URL = '/mystatic/'
那么对于语句:
{% static 'css/my_style.css' %}
代表的路径字符串为:
/mystatic/css/my_style.css
那么Django是如何去找寻文件 /mystatic/css/my_style.css 的呢?
现在作如下假设:
①我的Django项目的名字为shop,路径为:
E:/djproject/shop/
②名字为shop的Django项目只有一个应用,名叫app1,并且在app1下建立了目录static 。
③我通过下面这条语句设置了STATICFILES_DIRS的值为 E:/djproject/shop/static(注意:static后没有/
):
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
④我通过下面这条语句设置了STATIC_ROOT的值为 E:/djproject/shop/static_root(注意:static_root后没有/
):
STATIC_ROOT = os.path.join(BASE_DIR, 'static_root')
那么当我还没有执行命令python manage.py collectstatic
时,Django会按如下路径顺序去搜索静态资源/mystatic/css/my_style.css
①-各个应用中的static目录
E:/djproject/shop/app1/static/mystatic/css/my_style.css
②-STATICFILES_DIRS指定的目录
E:/djproject/shop/static/mystatic/css/my_style.css
当我执行了命令python manage.py collectstatic
后,Django会按如下路径顺序去搜索静态资源/mystatic/css/my_style.css
①-STATIC_ROOT指定的目录:
E:/djproject/shop/static_root/mystatic/css/my_style.css
②-STATICFILES_DIRS指定的目录
E:/djproject/shop/static/mystatic/css/my_style.css
③-各个应用中的static目录
E:/djproject/shop/app1/static/mystatic/css/my_style.css
至此,就将Django的静态资源目录设置的相关知识以及本文开始处列出的三条语句的作用说清楚了。
相关文章:
事关Django的静态资源目录设置(Django的setting.py中的三句静态资源(static)目录设置语句分别是什么作用?)
在Django的setting.py中常见的三句静态资源(static)目录设置语句如下: STATICFILES_DIRS [os.path.join(BASE_DIR, static)] STATIC_ROOT os.path.join(BASE_DIR, static) STATIC_URL /static/下面介绍这三句话的作用。 首先说第1句和第2句: STATI…...

Vue.js2+Cesium1.103.0 十四、绘制视锥,并可实时调整视锥姿态
Vue.js2Cesium1.103.0 十四、绘制视锥,并可实时调整视锥姿态 Demo <template><divid"cesium-container"style"width: 100%; height: 100%;"><divclass"control"style"position: absolute;right: 50px;top: 50px…...

批量替换WordPress文章内图片链接
在WordPress使用过程中,如果中途更换了域名,原先文章内的图片使用的是原来的域名,就会造成文章页里面的图片链接无法显示。如果从后台文章挨个修改就比较麻烦。可以通过数据库进行批量替换即可。 使用 PHPMyadmin 打开 数据库,登…...

关于DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC的一些发现
任务在哪 这个是11g以后的自动收集统计信息的后台任务,10g之前是在dba_scheduler_jobs里查看 SQL> SELECT CLIENT_NAME ,STATUS ,MEAN_INCOMING_TASKS_7_DAYS,MEAN_INCOMING_TASKS_30_DAYS FROM DBA_AUTOTASK_CLIENT WHERE…...

MatrixOne 支持多样化生态工具
近日,云原生数据库 MatrixOne 支持多样化生态工具,包括:数据集成工具、BI 工具和数据计算引擎这三类生态工具。 云原生数据库使得传统数据库得以充分结合云服务的免运维、高弹性、高可扩展、高可用、高性价比优势,又顺应了云端应…...

力扣刷题篇之位运算
系列文章目录 目录 系列文章目录 前言 一、位运算的基本运算 二、位运算的技巧 三、布隆过滤器 总结 前言 本系列是个人力扣刷题汇总,本文是数与位。刷题顺序按照[力扣刷题攻略] Re:从零开始的力扣刷题生活 - 力扣(LeetCode࿰…...
asp.net core mvc 控制器使用配置
一、在根目录 添加 mysettings.json 文件 mysettings.json 文件代码如下: {"MySettings": {"Name": "独立配置文件","Site": "lt"} }appsettings.json 文件代码如下: {"Logging": {&quo…...

Hadoop学习总结(MapRdeuce的词频统计)
MapRdeuce编程示例——词频统计 一、MapRdeuce的词频统计的过程 二、编程过程 1、Mapper 组件 WordcountMapper.java package com.itcast.mrdemo;import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; …...

PPT基础入门
目录 相关设置快捷键shift 快捷键Ctrl 快捷键Ctrl Shift 组合快捷键快捷键总结 相关设置 设置撤回次数 自动保存 图片压缩 字体嵌入:目的是在不同的电脑上保留已经设置好的字体 多格式导出 (1)可以导出PDF (2)可以导…...
Java 语言关键字有哪些
Java 语言关键字有哪些 分类关键字访问控制privateprotectedpublic类,方法和变量修饰符abstractclassextendsfinalimplementsinterfacenativenewstaticstrictfpsynchronizedtransientvolatileenum程序控制breakcontinuereturndowhileifelseforinstanceofswitchcase…...

Go vs Rust:文件上传性能比较
在本文中,主要测试并比较了Go—Gin和Rust—Actix之间的多部分文件上传性能。 设置 所有测试都在配备16G内存的 MacBook Pro M1 上执行。 软件版本为: Go v1.20.5Rust v1.70.0 测试工具是一个基于 libcurl 并使用标准线程的自定义工具,能…...

C# NAudio 音频库
C# NAudio 音频库 NAudio安装NAudio简述简单示例1录制麦克风录制系统声卡WAV格式播放MP3格式播放AudioFileReader读取播放音频MediaFoundationReader 读取播放音频 NAudio安装 项目>NuGet包管理器 搜索NAudio点击安装,自动安装依赖库。 安装成功后工具箱会新增…...

springcloudalibaba-3
一、Nacos Config入门 1. 搭建nacos环境【使用现有的nacos环境即可】 使用之前的即可 2. 在微服务中引入nacos的依赖 <!-- nacos配置依赖 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-…...
异步复位同步释放与同步复位打拍
参考链接:复位系列之异步复位同步释放与同步复位打拍...

使用Python进行二维图像的三维重建
2D图像的三维重建是从一组2D图像中创建对象或场景的三维模型的过程。这个技术广泛应用于计算机视觉、机器人技术和虚拟现实等领域。 在本文中,我们将解释如何使用Python执行从2D图像到三维重建的过程。我们将使用TempleRing数据集作为示例,逐步演示这个过…...

go-zero微服务的使用
一、入门案例 1、使用goland创建一个工程 2、新建一个user.proto syntax "proto3";package user; // 这个地方表示生成的go的包名叫user option go_package "./user";message UserInfoRequest {int64 userId 1; }message UserInfoResponse {int64 user…...
Java排序算法之基数排序
基数排序(Radix Sort)是一种线性时间复杂度的排序算法,其时间复杂度为O(d(nk)),其中d是数字的位数,k是进制数。基数排序是一种非比较排序算法,它按照数位的大小来进行排序。它可以处理正整数、负整数和小数…...

Ubuntu20.0中安装Gradle
下载Gradle到temp文件夹 wget https://services.gradle.org/distributions/gradle-8.3-bin.zip -P /tmp 然后解压文件到/opt/gradle目录 sudo unzip -d /opt/gradle /tmp/gradle-8.3.zip 配置Gradle环境变量 接下来我们会创建一个gradle.sh文件来保存Gradle的环境变量 sudo…...
【Java并发编程六】多线程越界问题
ArrayList()越界错误 import java.util.ArrayList; public class myTest implements Runnable {static ArrayList<Integer> a new ArrayList<>(10);public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(new myTest());T…...
聊聊httpclient的disableConnectionState
序 本文主要研究一下httpclient的disableConnectionState disableConnectionState org/apache/http/impl/client/HttpClientBuilder.java /*** Disables connection state tracking.*/public final HttpClientBuilder disableConnectionState() {connectionStateDisabled t…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...