义乌免费做网站,淘宝客api网站架设教程,方庄网站制作,免备案网站制作在Django的setting.py中常见的三句静态资源(static)目录设置语句如下#xff1a;
STATICFILES_DIRS [os.path.join(BASE_DIR, static)]
STATIC_ROOT os.path.join(BASE_DIR, static)
STATIC_URL /static/下面介绍这三句话的作用。
首先说第1句和第2句#xff1a;
STATI…在Django的setting.py中常见的三句静态资源(static)目录设置语句如下
STATICFILES_DIRS [os.path.join(BASE_DIR, static)]
STATIC_ROOT os.path.join(BASE_DIR, static)
STATIC_URL /static/下面介绍这三句话的作用。
首先说第1句和第2句
STATICFILES_DIRS [os.path.join(BASE_DIR, static)]STATIC_ROOT os.path.join(BASE_DIR, static)要明白这两句话的作用那首先要搞清楚Django在加载HTML模板文件时对于静态文件的查找是怎么样的。
Django在加载HTML模板文件时对于静态文件的查找分为两种情况 这两种情况根据是否执行了下面这条语句来区分
python manage.py collectstatic第01种-没有执行命令python manage.py collectstatic的情况 在这种情况下Django在加载HTML模板文件时对于静态文件的查找是按下面的顺序来进行的 各个应用的static目录 Django 会首先查找每个应用中的 static 目录这是默认的静态文件存放位置。每个应用通常都有一个 static 目录用于存放该应用的静态文件。如果你在应用中创建了这样的目录Django 将会在其中查找相应的静态文件。 STATICFILES_DIRS中的静态文件 如果在各个应用的 static 目录中找不到所需的静态文件Django 将在 STATICFILES_DIRS 指定的目录列表中进行查找。这些目录通常包括应用中的 static 目录以及其他自定义的静态文件目录。 Django提供的默认静态文件 Django 在运行时也会提供一些默认的静态文件例如 admin 应用的静态文件。这些文件通常不需要你手动收集Django 会自动处理。
这种情况下没有集中存放静态文件而是直接在各个应用的 static 目录中查找。这在开发阶段是方便的但在生产环境中通常会通过执行 python manage.py collectstatic 来将静态文件集中存放到一个目录以提高性能和更好地组织静态文件于是便产生了第2种情况。
第02种-执行命令python manage.py collectstatic的情况 当运行 python manage.py collectstatic 命令时Django 会从各个应用的 static 目录以及 STATICFILES_DIRS 指定的目录中收集静态文件并将它们复制到 STATIC_ROOT 指定的目录下。注意复制的时候会把相应的目录结构也复制上而不只是静态文件哈。这样做的目的是为了在生产环境中集中存放所有静态文件以便于 Web 服务器更有效地提供它们。
执行命令 python manage.py collectstatic 后Django在加载HTML模板文件时对于静态文件的查找则变成了下面的顺序来进行了(注意此时与第1种情况的顺序有很大的区别了) STATIC_ROOT中的静态文件 Django 会首先查找STATIC_ROOT目录中是否存在所需的静态文件。这是因为STATIC_ROOT是用于收集所有静态文件的根目录它们都被复制到这个目录下。 STATICFILES_DIRS中的静态文件 如果在STATIC_ROOT中找不到所需的静态文件Django 将在STATICFILES_DIRS指定的目录列表中进行查找。这些目录通常包括应用中的static目录以及其他自定义的静态文件目录。 各个应用的static目录 如果在以上步骤中都找不到所需的静态文件Django 将在各个应用的static目录中查找。每个Django应用通常都有一个static目录用于存放该应用的静态文件。
当你在模板文件中引用静态文件时Django 使用{% static %} 模板标签来生成对应的 URL。这个标签会首先查找STATIC_ROOT然后是STATICFILES_DIRS最后是各个应用的static目录。
读懂了上面对“Django在加载HTML模板文件时对于静态文件的查找”的两种情况的介绍相信您就知道了下面两句设置语句的作用了
STATICFILES_DIRS [os.path.join(BASE_DIR, static)]STATIC_ROOT os.path.join(BASE_DIR, static)接下来说下面这条语句的作用
STATIC_URL /static/这句话只有在Django的HTML模板中使用了如下的模板语言时才有作用
{% static css/my_style.css %}当jango的HTML模板中使用了上面的模板语言并在HTML模板文件的开头处写上了下面这条语句时
{% load static %}那么此时{% static css/my_style.css %}中的static就作为是静态文件的路径前缀了如果此时 STATIC_URL 的值用下面这条语句设定为/mystatic/
STATIC_URL /mystatic/那么对于语句
{% static css/my_style.css %}代表的路径字符串为
/mystatic/css/my_style.css那么Django是如何去找寻文件 /mystatic/css/my_style.css 的呢 现在作如下假设: ①我的Django项目的名字为shop路径为
E:/djproject/shop/②名字为shop的Django项目只有一个应用名叫app1并且在app1下建立了目录static 。 ③我通过下面这条语句设置了STATICFILES_DIRS的值为 E:/djproject/shop/static(注意static后没有/)
STATICFILES_DIRS [os.path.join(BASE_DIR, static)]④我通过下面这条语句设置了STATIC_ROOT的值为 E:/djproject/shop/static_root(注意static_root后没有/)
STATIC_ROOT os.path.join(BASE_DIR, static_root)那么当我还没有执行命令python manage.py collectstatic时Django会按如下路径顺序去搜索静态资源/mystatic/css/my_style.css ①-各个应用中的static目录
E:/djproject/shop/app1/static/mystatic/css/my_style.css②-STATICFILES_DIRS指定的目录
E:/djproject/shop/static/mystatic/css/my_style.css当我执行了命令python manage.py collectstatic后Django会按如下路径顺序去搜索静态资源/mystatic/css/my_style.css ①-STATIC_ROOT指定的目录 E:/djproject/shop/static_root/mystatic/css/my_style.css②-STATICFILES_DIRS指定的目录
E:/djproject/shop/static/mystatic/css/my_style.css③-各个应用中的static目录
E:/djproject/shop/app1/static/mystatic/css/my_style.css至此就将Django的静态资源目录设置的相关知识以及本文开始处列出的三条语句的作用说清楚了。