Django笔记——静态文件

Django学习之静态文件

静态文件

在 Django 项目中加载静态文件(如 CSS、JavaScript 和图片等)是构建网站时的一个常见需求。

常见步骤如下:

步骤1:配置 INSTALLED_APPS: setting.py

确保 django.contrib.staticfiles 已经添加到 settings.py 文件中的 INSTALLED_APPS 列表中。

# settings.py

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles", # 确保这一行存在
    "home", # 要对自己的app进行安装
]

步骤 2: 确保配置了 STATIC_URL: setting.py

(一般都会自带)确保在 settings.py 中,使用 pathlib.Path 定义了 BASE_DIR,并设置了STATIC_URL

# settings.py

from pathlib import Path

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/5.2/howto/static-files/

STATIC_URL = "static/" # 静态文件的基本 URL 前缀

步骤 3: 在应用目录下创建 static 文件夹

对于每个 Django 应用,建议在其内部创建一个 static 目录,并在这个目录下再创建一个与应用同名的子目录来存放静态文件。这样做可以避免不同应用间静态文件名称冲突的问题。

例如下面这个项目结构,其中templ_demo是项目名,home是app名,此时的CSS的静态文件路径为templ_demo/home/static/ css/static_css.css,改成templ_demo/home/static/home/css/static_css.css更符合规范
在这里插入图片描述

步骤 4: 配置 STATICFILES_DIRS(如果需要)

如果有项目级别的静态文件(不隶属于任何一个应用),可以在 settings.py 中配置 STATICFILES_DIRS 来指定这些文件的位置。

# settings.py
STATICFILES_DIRS = [
    BASE_DIR / "static"  # 记得在项目根目录下创建由 STATICFILES_DIRS 引用的全局静态资源目录,如果需要
]

步骤 5: 在模板中加载静态文件

在模板中使用 {% load static %} 加载静态文件标签库,然后通过 {% static 'path/to/file' %} 来引用静态文件。

<!--如果加了配置项 ’builtins‘:['django.templatetags.static'],则不需要下面这行 -->
<!-- {% load static %}#} --> 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>静态文件加载</title>
    <!-- 如果静态文件位于 home 应用下的 static/home/css/static_css.css -->
    <link rel="stylesheet" href="{% static 'home/css/static_css.css' %}">
    <script src="{% static 'home/js/static_js.js' %}"></script>
</head>
<body>
    <h1>欢迎来到第五论坛</h1>
</body>
</html>

如果不想每次在模版中加载静态文件都使用 load 加载 static 标签,那么可以在 settings.py 中的 TEMPLATES/OPTIONS 添加 'builtins':['django.templatetags.static'] ,这样以后在模版中就可以直接使用 static 标签,而不用手动的 load 了。

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates", # 模版引擎
        "DIRS": [BASE_DIR / 'templates'] # 列表:存放所有的模板路径
        ,
        "APP_DIRS": True, # 这个设置为True后,会在APP自己的templates文件夹中查找模板
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
            # 如果不想用load加载static标签,添加此行
            "builtins":['django.templatetags.static']
        },
    },
]

步骤6:手动配置并加载媒体文件(如用户上传的图片、视频等)

需要手动为媒体文件(如用户上传的图片、视频等)配置URL映射,使得Django开发服务器能够在开发阶段提供这些文件的服务

  1. 配置 MEDIA_URLMEDIA_ROOT

首先,在 settings.py 中定义 MEDIA_URLMEDIA_ROOT,以指定媒体文件的访问前缀和存储位置。

# settings.py

# media相关的配置
MEDIA_URL= '/media/' # 指定媒体文件的公共URL前缀,即通过该URL访问
MEDIA_ROOT = BASE_DIR / 'media' # 服务器上存储用户上传文件的实际位置,即存放在当前文件夹的media文件夹
  1. 更新 URL 配置

接下来,在 urls.py 文件中手动添加URL映射,以便将请求映射到实际的媒体文件路径。

# urls.py
# 导入了 Django 的设置模块,使得你可以访问项目中的各种设置变量
from django.conf import settings
# 导入了 Django 的 static 函数,用于在开发环境中将 URL 映射到媒体文件(如用户上传的图片、视频等),
# 使得可以通过这些 URL 访问项目的媒体资源
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    # ... 其他URL模式 ...
] + static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
  1. 模板中引用媒体文件

在模板中引用媒体文件时,可以使用 {% get_media_prefix %} 模板标签来生成媒体文件的URL前缀。例如:

<img src="{% get_media_prefix %}images/example.jpg" alt="Example Image">

或者直接拼接URL前缀:

<img src="{{ MEDIA_URL }}images/example.jpg" alt="Example Image">
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值