在一个网页中,不仅仅只有一个html骨架,还需要css样式文件、js执行文件以及一些图片等。在DTL中,使用 static 标签来加载静态文件,使用static标签时,首先需要 {% load static %}

必要条件

加载静态资源文件的必要条件:

  1. 确保 django.contrib.staticfiles 已经添加到 settings 的 INSTALLED_APPS 中(默认已添加)。
  2. 确保在settings.py中设置了 STATIC_URL (一般在最后一行)。
  3. INSTALLED_APPS 中添加app的名字。
  4. 在已经安装了的app下创建一个 static 目录,再在这个static下创建一个当前app名字的文件夹,然后再把静态文件放到这个文件夹下。(如果不这样做,若其他 app下也有static,将根据在 INSTALLED_APPS 中添加的先后顺序进行加载。)

例如你的app叫做book,有一个静态文件叫做logo.jpg,那么路径为book/static/book/logo.jpg。

为什么在app下创建一个static文件夹,还需要在这个static下创建一个同app名字的文件夹呢?
原因是如果直接把静态文件放在static文件夹下,那么在模板加载静态文件的时候就是使用logo.jpg,如果在多个app之间有同名的静态文件,这时候可能就会产生混淆。
而在static文件夹下加了一个同名app文件夹,在模板中加载的时候就是使用app/logo.jpg,这样就可以避免产生混淆。


其他情况

  1. 如果有一些静态文件不和任何app挂钩,那么可以在settings.py中添加 STATICFILES_DIRS ,以后DTL就会在这个列表的路径中查找静态文件。

    1. STATICFILES_DIRS = [
    2. os.path.join(BASE_DIR,"static")
    3. ]
  2. 在模板中使用load标签加载static标签:
    ```python {% load static %} {# 加载在项目的static文件夹下的style.css的文件:static/style.css #}

{# 加载在项目的static下项目名字下的style.css的文件:static/front/style.css,front为app名字 #}

  1. 以上两种情况,分别适用static目录在项目名字内和在项目名字外。
  2. 3. 如果不想每次在模板中加载静态文件都使用load加载static标签,那么可以在settings.py中的 `TEMPLATES/OPTIONS` 添加 `'builtins':['django.templatetags.static']`
  3. ```python
  4. TEMPLATES = [
  5. {
  6. ………………
  7. 'OPTIONS': {
  8. 'builtins':['django.templatetags.static'],
  9. 'context_processors': [
  10. ………………
  11. ],
  12. },
  13. },
  14. ]

这样以后在模板中就可以直接使用static标签,而不用手动的load了。

  1. 如果没有在settings的 INSTALLED_APPS 中添加 django.contrib.staticfiles 。那么就需要手动的将请求静态文件的url与静态文件的路径进行映射了。
    ```python from django.conf import settings from django.conf.urls.static import static

urlpatterns = [

  1. # 其他的url映射

] + static(settings.STATIC_URL, document_root=settings.STATICFILES_DIRS[0]) ```