2 Django静态文件配置详情

  • static,开发所需要的图片、css、js等。例如:默认头像
  • media,用户上传excel、图片等。 例如:用户上传头像
    • 上传逻辑,视图-> 写入media目录
    • 配置media路径
    • 路由配置
    • 用户观看

1 项目根目录配置

路径配置(比如导入JavaScript、css、bootstrap)

  1. 首先在项目的根目录下创建一个static文件夹,并在settings.py文件中配置如下:

    STATIC_URL = '/static/'  # url访问时的路径
    
    STATICFILES_DIRS = [
    	os.path.join(BASE_DIR, 'static')  # 此‘static’和创建的静态文件名称一致即可。
    ]
    

    此时也就可以使用url访问静态文件夹下的静态文件了:http://127.0.0.1:8000/static/jquery-3.6.0.min.js

  2. 在模板中使用
    方式一:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>Title</title>
    	<script src="/static/jquery-3.6.0.min.js"></script>
    </head>
    <body>
    </body>
    </html>
    

    方式二:

    {% load static %}
    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>Title</title>
    	<script src="{% static 'jquery-3.6.0.min.js' %}"></script>
    </head>
    <body>
    </body>
    </html>
    

2 App目录下配置

如果static文件夹创建在了app文件夹下,那么模板使用时,最好用load。

image


问:如果存在多个app时,static文件夹使用的是哪个?

1.首先Django会按照,app的注册顺序依次往下查找static文件夹。
2.在app下创建static文件夹时,注意创建自己app文件夹的,便于与其它app进行区分。

注:多app开发:各自app的图片放在各自 /static/app名字/。。。

  • 在开发过程中

    • 禁止

      <img src="/static/api/1.png">
      
    • 建议

      {% load static %}
      
      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>Title</title>
      </head>
      <body>
      <h1>登录页面</h1>
      <a href="/xxx/xxxxx/">调换dao xx</a>
      <a href="{% url 'login' %}">跳转</a>
      
      <img src="{% static 'api/1.png' %}">
      
      </body>
      </html>
      

3 补充

开发中在开启了debug模式时,django可以通过配置,允许用户通过对应的url地址访问django的静态文件。

setting.py,代码:

STATIC_ROOT = BASE_DIR / 'static'
STATIC_URL = '/static/'   # django模板中,可以引用{{STATIC_URL}}变量避免把路径写死。

总路由,urls.py,代码:

from django.views.static import serve as serve_static
urlpatterns = [
    path('admin/', admin.site.urls), 
    # 对外提供访问静态文件的路由,serve_static 是django提供静态访问支持的映射类。依靠它,客户端才能访问到django的静态文件。
    path(r'static/<path:path>', serve_static, {'document_root': settings.STATIC_ROOT},),
]

注意:项目上线以后,关闭debug模式时,django默认是不提供静态文件的访问支持,项目部署的时候,我们会通过收集静态文件使用nginx这种web服务器来提供静态文件的访问支持。


4 media配置

第一步:在settings文件中配置如下:

import os

# http://127.0.0.1:8000/media/
MEDIA_URL = '/media/'  # 访问前缀

# 文件目录
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')  # 该目录可以手动创建也可以自动创建

第二步:在url中配置

from django.urls import re_path
from django.views.static import serve
from django.conf import settings

urlpatterns = [
    # http://127.0.0.1:8000/media/1.png
    # http://127.0.0.1:8000/media/xxx/w1.jpg
    re_path(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}, name='media'),
]
posted @ 2022-08-10 11:47  角角边  Views(349)  Comments(0)    收藏  举报