Django静态资源配置详解:STATIC_URL与STATICFILES_DIRS的使用

夏知夏
夏知夏
发布时间:2026-10-13| 4人浏览过
原创

本文详细解析Django项目中静态资源的配置方法,涵盖STATIC_URL与STATICFILES_DIRS的设置差异、模板中静态文件的两种加载方式({% load static %}与内置注册)、常见错误排查及浏览器缓存清除技巧,帮助开发者高效管理CSS、JS及图片等静态资源。

在Django项目中配置静态资源时,常会遇到路径错误或文件无法加载的问题。经过查阅官方文档、Stack Overflow社区讨论及多次调试,最终梳理出一套稳定的静态图片与资源加载方案,特此记录供参考。

Django静态资源核心配置

Django中静态资源的管理核心在于两个关键配置:STATIC_URL和STATICFILES_DIRS。通常,STATIC_URL用于定义访问静态资源的URL前缀,默认值一般设置为/static/。

STATIC_URL='/static/'所指定的static目录,通常是在具体的Django APP目录下创建的,用于存放该APP专用的静态资源。而STATICFILES_DIRS则用于配置项目级别的通用静态资源,这些资源所在的目录不应放在APP内部,而应位于Project根目录下,例如:

STATICFILES_DIRS=(os.path.join(BASE_DIR, "common_static"),)

在模板文件中访问静态资源时,无论资源实际存储在APP下的static目录还是Project下的common_static目录,统一使用/static/加上资源文件名的方式即可正确访问。

为了提高代码的可移植性,建议在模板中使用STATIC_URL变量来引用资源路径,而非硬编码/static/。但需注意,必须在settings.py中进行两项特定配置,否则可能导致资源无法获取:

1. 在INSTALLED_APPS列表中,确保包含'django.contrib.staticfiles'。

2. 在TEMPLATES配置的context_processors中,添加'django.template.context_processors.static'。

在模板中调用静态资源时,示例如下:

<img src="{{STATIC_URL}}pic.jpg " />

模板中静态文件的加载方式

补充知识:Django中static(静态)文件详解以及{% static %}标签的使用

现代网页不仅包含HTML结构,还依赖CSS样式、JavaScript脚本及图片等静态资源。因此,在Django模板语言(DTL)中正确加载静态文件至关重要。DTL提供了static标签来简化这一过程,使用前需先执行{% load static %}。

加载静态文件的标准步骤如下:

首先,确保django.contrib.staticfiles已添加至settings.INSTALLED_APPS中。

其次,确保在settings.py中正确设置了STATIC_URL。

注意:上述两项配置在创建Django项目时已默认生成,若未手动修改,通常无需额外处理。

APP内静态文件目录结构

在已安装的APP目录下创建一个名为static的文件夹,并在其中再创建一个与APP名称相同的子文件夹,将静态文件放入该子文件夹中。例如,若APP名为book,静态文件为book.jpg,则完整路径为book/static/book/book.jpg。

为何要在static文件夹下再建一个同名APP文件夹?这是为了避免不同APP间出现同名静态文件时的冲突。若直接将文件置于static根目录,加载时仅用文件名易产生混淆;而在static下增加同名APP文件夹后,模板中引用路径变为app名/文件名,从而有效避免冲突。

注意:该文件夹的名称必须严格为static。

项目级通用静态资源管理

若部分静态文件不属于任何特定APP,即不位于任何APP目录下,可在settings.py中配置STATICFILES_DIRS。此后,DTL将在该列表指定的路径中查找静态文件。例如,在manage.py同级目录下新建static文件夹,并在settings.py中添加STATICFILES_DIRS配置。


STATICFILES_DIRS = [
 os.path.join(BASE_DIR,"static")
]

注:第三种和第四种方法均可加载静态文件。个人习惯是在manage.py同级目录下新建static文件夹,并将所有静态文件分类存储其中,而不为每个APP单独创建static文件夹。这仅是个人偏好,只要项目能正常运行且代码结构清晰、有逻辑性即可。

模板标签使用与内置注册

在模板中使用load标签加载static标签。例如,要加载项目static文件夹下的style.css文件,示例代码如下:

{% load static %}

<link rel="stylesheet" href="{% static 'style.css' %}" rel="external nofollow" >

注意:{% load static %}必须放置在HTML头部位置(至少在使用static标签的代码之上),通常放在HTML文件的最顶端。若同时存在{% extend %}和{% load static %}标签,{% extend %}必须置于最上方,随后再放置{% load static %}及其他标签。

若不想每次在模板中手动使用load加载static标签,可在settings.py的TEMPLATES/OPTIONS中添加'builtins':[‘django.templatetags.static']。这样,模板中即可直接使用static标签,无需手动load。

注意:添加位置不可错误。


TEMPLATES = [
 {
  'BACKEND': 'django.template.backends.django.DjangoTemplates',
  'DIRS': [os.path.join(BASE_DIR, 'templates')]
  ,
  'APP_DIRS': True,
  'OPTIONS': {
   'context_processors': [
    'django.template.context_processors.debug',
    'django.template.context_processors.request',
    'django.contrib.auth.context_processors.auth',
    'django.contrib.messages.context_processors.messages',
   ],
   #添加在这个位置
   'builtins' : [
    'django.templatetags.static'
   ],
  },
 },
]

高级配置与调试技巧

下面的不常用,但是可以了解一下。

若未在settings.INSTALLED_APPS中添加django.contrib.staticfiles,则需手动将请求静态文件的URL与静态文件路径进行映射。示例代码如下:


from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
 # 其他的url映射
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

但平时我们并不会用到这个,Django内置已经将django.contrib.staticfiles添加进去了的,我们为什么要给他删除来自找麻烦呢?放在这里也只是提供一个参考,了解一下。

最后分享一个快捷键的使用:在我们写项目的时候,有时候修改了代码而没有效果,这是因为浏览器使用的缓存加载,这个时候我们就可以使用这个快捷键来不使用缓存加载一个文件,来达到查看修改代码之后的效果的目地。

ctrl+shift+r 不使用缓存加载一个文件

以上这篇Python Django中的STATIC_URL 设置和使用方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。