如何在 Django 中设置静态文件

背景

在使用 Django 建设网站的过程中通常需要提供其他一些静态文件,例如 css,js,img 等,然而众所周知,django 无法像 apache 或者 iis 一样直接放上去就可以用,成为了众多新手的一大门槛,笔者也是被折磨了多次。花了一上午时间深入研究了 Django 相关官方文档,记录下来顺便整理一下。

静态文件提供的两种方式

Django 提供了 django.contrib.staticfiles 来帮助用户管理静态文件。

APP 内部文件

  1. 确保django.contrib.staticfiles 在 settting 文件的 INSTALLED_APPS中
  2. 在 setting 文件中,定义变量 STATIC_URL
    STATIC_URL = ‘/static/‘
  3. 在 my_site/my_app/目录下新建文件夹static/my_app/ 然后在其下面存放文件 myexample.jpg文件
  4. 在模板中使用的时候,可以有两种使用方式

    1. 硬编码
      直接硬编码为/static/my_app/myexample.jpg 这样。注意,Django 会查找所有 app 目录下的static/my_app 文件夹,例如你有两个 app,my_app1,my_app2
      目录结构如下:
      my_app1
      -static
      —my_app
      —–myexample.jpg
      my_app2
      -static
      —my_app
      —–myexample.jpg

    那么这样使用的时候,会直接使用第一个目录下的文件

    1. 软编码
      也可以使用 static 模板标签来根据相对路径生成 url.

全局文件

Django查找静态文件的顺序问题

首先会查找各个 app 下面的 STATIC_URL 文件所指定的目录

命名空间 namespace 的问题

测试环境中使用

生产环境中使用