3-静态文件

静态文件

模板文件:我们将html文件都默认放在templates这个文件夹下,这个文件夹一般在项目根目录新建即可

静态文件:我们将网站所使用的静态文件默认都放在static文件夹下

image-20240228155622045

静态文件配置

STATIC_URL = '/static/'  # 类似于访问静态文件的令牌

# 添加下面的这段代码即可
# 静态文件配置
# 默认查找位置是当前APP的目录下
# 这个配置定义了静态文件应用在启用 FileSystemFinder 查找器时将穿越的额外位置

# 方式1:
# 需要先导入os模块
STATICFILES_DIRS  = [
    os.path.join(BASE_DIR, 'static'),
    # 这里可以继续加别的路径地址,这里就算为每一个单独的APP添加路径,添加之后一样可以使用模板语法
]

# 方式2:
# 不需要导入模块,因为django已经导入过pathlib模块了
STATICFILES_DIRS = [BASE_DIR / 'static']

前端配置

html页面最顶部添加{% load static %},告诉 Django模板引擎要在模板中使用静态文件;这样,便可以使用 static 模板标签引入静态目录中的文件

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <p>下面是一张很好看的图片</p>
    <img src="{% static 'img/hero.png' %}" alt="这是一张英雄的图片">
</body>
</html>

media文件夹

# 手动在根目录下创建media文件夹
MEDIA_URL = '/media/'
# 手动配置路径
MEDIA_ROOT = BASE_DIR / 'media'
# 上面两个都需要创建

'''

在 Django 中配置 media 路由通常是为了在开发环境中提供用户上传的媒体文件的访问。
在生产环境中,通常不直接由 Django 处理媒体文件的服务,而是由 Web 服务器(如 Nginx 或 Apache)来处理。
'''

# 主路由urls.py
# 路由配置固定的写法
from django.urls import re_path
from django.views.static import serve
from django.conf import settings


urlpatterns = [
	
    # 配置media文件夹 老方法
    re_path(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT})
    # 省略其它路由
    # 注意!!!! 一定要配在其它路由前面!!!
    # 一定要陪在项目同名的路由urls下面!! 配置在创建的app的urls下面 无效!!!!
    
    # 新方法 推荐!
    path('media/<path:path>', serve, {'document_root': settings.MEDIA_ROOT}),
]

配置静态方式2 (推荐)

# settings中
# 静态文件
STATIC_URL = "static/"
STATIC_ROOT = "static/"
# ----------------- 静态media文件夹 -------------------#
MEDIA_URL = "media/"
MEDIA_ROOT = BASE_DIR / 'media' 

# 记得再项目的根目录下新建static以及media文件夹

# 路由层中
# 导入模块 配置静态目录
from django.contrib.staticfiles.urls import staticfiles_urlpatterns, static
from . import settings
urlpatterns = [
    # ... 
]

# 配置static的
urlpatterns += staticfiles_urlpatterns()
# 配置media的
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

# 完成
# http://127.0.0.1:8000/media/img/backend-logo.jpg

media文件夹和static文件夹区别

在 Django 中,media 文件夹和 static 文件夹都用于存储静态文件,但它们的用途和管理方式有所不同。

1. Media 文件夹:

media 文件夹用于存储用户上传的媒体文件,例如图片、视频、音频等。这些文件通常是动态生成的,由用户上传到应用程序中,或者由应用程序生成并保存在服务器上。

在 Django 中配置 media 文件夹时,你需要在 settings.py 文件中设置 MEDIA_ROOTMEDIA_URL

  • MEDIA_ROOT 定义了媒体文件在服务器上的存储路径。
  • MEDIA_URL 定义了媒体文件在浏览器中的访问路径。

配置示例:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

2. Static 文件夹:

static 文件夹用于存储应用程序中的静态文件,例如 CSS、JavaScript、图像等。这些文件通常是在开发阶段就存在的,不会根据用户上传或应用程序的运行而改变。

在 Django 中配置 static 文件夹时,你需要在 settings.py 文件中设置 STATIC_ROOTSTATIC_URLSTATICFILES_DIRS

  • STATIC_ROOT 定义了静态文件在服务器上的收集路径,用于生产环境中,用于收集静态文件。
  • STATIC_URL 定义了静态文件在浏览器中的访问路径。
  • STATICFILES_DIRS 定义了额外的静态文件路径,Django 会在这些路径中查找静态文件。

配置示例:

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]

注意事项:

  • 在开发阶段,STATICFILES_DIRS 中定义的路径用于查找静态文件,而在生产环境中,静态文件应该被收集到 STATIC_ROOT 中,并由 Web 服务器(如 Nginx 或 Apache)提供服务。
  • media 文件夹用于存储用户上传的文件,因此需要配置相应的 URL 和路径。而 static 文件夹存储的是应用程序的静态文件,因此也需要相应的配置。
  • 在模板中使用静态文件时,可以使用 {% static %} 模板标签来引用静态文件,例如 {% static 'css/styles.css' %}。而在视图中,可以使用 django.contrib.staticfiles.finders.find 函数来查找静态文件的路径。
posted @ 2024-03-23 00:49  小满三岁啦  阅读(11)  评论(0编辑  收藏  举报