静态文件

  • 项目中的图片CSSjs都是静态文件
  • 一般会将静态文件放到一个单独的目录中,以方便管理
    • 静态文件可以放在项目根目录下,也可以放在应用的目录下
    • 由于有些静态文件在项目中是通用的,所以推荐放在项目的根目录下,方便管理
  • 在项目的settings文件中,通过STATICFILES_DIRS列表配置静态文件的加载路径
  • 在html页面中调用静态文件时,需要指定静态文件所在的路径

需求:展示一张静态图片

展示静态图片实现

  • 1.在项目根目录下创建存放静态文件的文件夹

    • 把需要展示的静态图片拷贝到images文件夹

  • 2.在settings文件中配置静态文件加载路径

      STATIC_URL = '/static/'
      # 配置静态文件加载路径
      STATICFILES_DIRS = [
          os.path.join(BASE_DIR, 'static')
      ]
    
  • 3.正则匹配urls

      # 展示静态图片
      url(r'^index/$', views.index),
    
  • 4.视图

      # 展示静态图片
      def index(request):
          return render(request, 'Book/index.html')
    
  • 5.模板

      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>展示静态图片</title>
      </head>
      <body>
    
      <img src="/static/images/mm01.jpg" alt="mm01">
    
      </body>
      </html>
    

思考:Django如何加载静态文件?

  • 已知:
    • 配置加载路径:os.path.join(BASE_DIR, 'static')
    • 图片本地路径:/static/images/mm01.jpg
  • 过程:

    • 首先,判断图片本地地址的开始部分是否与STATIC_URL一致,如果一致则取出余下部分images/mm01.jpg
    • 然后,使用os.path.join(BASE_DIR, 'static') 拼接 images/mm01.jpg得到静态文件加载全路径
  • 提示:STATIC_URL不一致就报404

static标签:动态生成静态文件路径

  • 为了安全和方便维护,可以通过配置项达到隐藏真实静态文件路径的目的

    • 可以使用static标签,根据配置项动态生成静态文件路径
  • 模板中使用static标签

<img src="/static/images/mm01.jpg" alt="mm01">
<br>
<br>
{# 动态生成静态文件路径 #}
{% load static from staticfiles %}
<img src="{% static 'images/mm01.jpg' %}" alt="mm01">
  • 修改STATIC_URL

      # STATIC_URL = '/static/'
      STATIC_URL = '/zxc/'
    
  • 浏览效果

  • 说明:这种方案可以隐藏真实的静态文件路径,但是结合Nginx布署时,会将所有的静态文件都交给Nginx处理,而不用转到Django部分,所以这项配置就无效了,这个功能有些鸡肋!