事关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…...
AI 模型推理延迟与吞吐率的权衡
AI模型推理延迟与吞吐率的权衡:优化策略与实践 在AI应用场景中,模型推理的延迟(Latency)和吞吐率(Throughput)是衡量系统性能的两大核心指标。延迟指单次请求的响应时间,直接影响用户体验&…...
紧急预警!Vim惊现远程代码执行漏洞CVE-2026-34714,开发者必看防护指南
紧急预警!Vim惊现远程代码执行漏洞CVE-2026-34714,开发者必看防护指南 作为天天和代码打交道的你,有没有想过:打开一个“普通文本文件”的瞬间,系统可能已经被植入后门?2026年3月,Vim官方披露的…...
kprobe函数入口时的汇编跳板执行流程与栈帧机制
kprobe函数入口汇编跳板执行流程与栈帧机制 文章目录kprobe函数入口汇编跳板执行流程与栈帧机制前言环境准备ftrace跳板创建跳板执行流程与栈帧逐行拆解初始状态与安全校验双层栈帧构建(CONFIG_FRAME_POINTER)通用寄存器保存与C函数参数准备剩余寄存器保…...
Windows Defender优化工具:提升系统性能的安全配置方案
Windows Defender优化工具:提升系统性能的安全配置方案 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirrors/wi…...
Windows系统盘空间告急?Driver Store Explorer帮你轻松清理冗余驱动,快速释放10GB+
Windows系统盘空间告急?Driver Store Explorer帮你轻松清理冗余驱动,快速释放10GB 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否曾困惑于Windows系统盘空…...
华硕笔记本色彩配置文件异常修复全指南:基于G-Helper的专业解决方案
华硕笔记本色彩配置文件异常修复全指南:基于G-Helper的专业解决方案 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, T…...
50 岁苹果:变与不变的科技传奇
从车库小作坊到行业巨头:苹果早期的革命之路1976 年,在科技巨头普遍认为电脑仅供企业和政府使用时,乔布斯和沃兹尼亚克在车库用零件组装出 Apple I,虽像半成品却为苹果拿到启动资金。次年的 Apple II 才是关键,它是第一…...
百度网盘资源加速工具:突破下载限制的开源解决方案
百度网盘资源加速工具:突破下载限制的开源解决方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 如何在不升级会员的情况下实现百度网盘高速下载?这款…...
4个核心预训练模型应用指南:从资源获取到问题诊断
4个核心预训练模型应用指南:从资源获取到问题诊断 【免费下载链接】so-vits-svc SoftVC VITS Singing Voice Conversion 项目地址: https://gitcode.com/gh_mirrors/so/so-vits-svc 预训练模型是so-vits-svc实现高质量语音转换的基础组件,这些经过…...
3种突破Cursor Pro限制的创新方案:解锁AI编程全功能体验
3种突破Cursor Pro限制的创新方案:解锁AI编程全功能体验 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your t…...
