事关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…...
NS模拟器自动化管理系统:简化游戏兼容性配置的解决方案
NS模拟器自动化管理系统:简化游戏兼容性配置的解决方案 【免费下载链接】ns-emu-tools 一个用于安装/更新 NS 模拟器的工具 项目地址: https://gitcode.com/gh_mirrors/ns/ns-emu-tools NsEmuTools是一款专为Nintendo Switch模拟器用户设计的桌面端管理解决方…...
CoreSight MTB-M33勘误文档解析与嵌入式开发实践
1. CoreSight MTB-M33 勘误文档解析作为一名长期从事嵌入式开发的工程师,我深知芯片勘误文档(Errata Notice)在实际项目中的重要性。今天要讨论的这份CoreSight MTB-M33勘误文档,是每个使用Cortex-M33处理器的开发者都必须仔细研读…...
条件矩约束模型中的局部稳健推断与正交工具变量应用
1. 条件矩约束模型:从核心挑战到稳健推断的桥梁在实证研究的工具箱里,条件矩约束模型(Conditional Moment Restrictions, CMRs)无疑是一把瑞士军刀。无论是评估一项政策对经济产出的影响,还是分析用户特征如何影响其购…...
倒计时36个月:欧盟《AI搜索透明度法案》草案曝光,所有商用AI搜索引擎必须通过可解释性审计——附合规自查清单v2.1
更多请点击: https://kaifayun.com 第一章:倒计时36个月:欧盟《AI搜索透明度法案》草案的战略影响 距离欧盟《AI搜索透明度法案》(AI Search Transparency Act, AISTA)草案正式生效仅剩36个月,该立法已进入…...
初次使用Taotoken,从注册到发出第一个API请求的全流程耗时记录
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初次使用Taotoken,从注册到发出第一个API请求的全流程耗时记录 1. 场景与目标 本文旨在记录一名新用户从零开始&#…...
TV Bro电视浏览器:让智能电视变身全能上网终端的终极指南
TV Bro电视浏览器:让智能电视变身全能上网终端的终极指南 【免费下载链接】tv-bro Simple web browser for android optimized to use with TV remote 项目地址: https://gitcode.com/gh_mirrors/tv/tv-bro 你是否曾经尝试在智能电视上浏览网页,却…...
【稻米计数】形态学稻米计数【含Matlab源码 15562期】
💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab领域博客之家💞&…...
可视化 React 水合(Hydration)问题
以下是 Next.js React 水合(Hydration)问题的 Mermaid 可视化,包含流程图(问题全景)和时序图(时间线视角),以及简要说明。1. 水合问题全景流程图 #mermaid-svg-tjAQ0VWDBl1ii9LA{fo…...
长期使用Taotoken的账单追溯与成本分析实践分享
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期使用Taotoken的账单追溯与成本分析实践分享 在将大模型能力集成到产品或研发流程中时,成本的可观测性与可控性是团…...
Windows触控板终极优化:三指拖拽功能完整配置指南
Windows触控板终极优化:三指拖拽功能完整配置指南 【免费下载链接】ThreeFingersDragOnWindows Enables macOS-style three-finger dragging functionality on Windows Precision touchpads. 项目地址: https://gitcode.com/gh_mirrors/th/ThreeFingersDragOnWind…...
