在一個網頁中,不僅僅只有一個html
骨架,還需要css
樣式文件,js
執行文件以及一些圖片等。因此在DTL
中加載靜態文件是一個必須要解決的問題。在DTL
中,使用static
標簽來加載靜態文件。要使用static
標簽,首先需要{% load static %}
。
加載靜態文件的步驟如下:
1、首先確保django.contrib.staticfiles
已經添加到settings.INSTALLED_APPS
中。
2、確保在settings.py
中設置了STATIC_URL
。
注意: 上面兩條都是在創建Django 項目的時候就自動給我們弄好了,只要我們沒有去改動它,就不用管。
3、在已經安裝了的app
下創建一個文件夾叫做static
,然后再在這個static
文件夾下創建一個當前app
的名字的文件夾,再把靜態文件放到這個文件夾下。例如你的app
叫做book
,有一個靜態文件叫做book.jpg
,那么路徑為book/static/book/book.jpg
。(為什么在app
下創建一個static
文件夾,還需 要在這個static
下創建一個同app
名字的文件夾呢?原因是如果直接把靜態文件放在static
文件夾下,那么在模版加載靜態文件的時候就是使用book.jpg
,如果在多個app
之間有同名的靜態文件,這時候可能就會產生混淆。而在static
文件夾下加了一個同名app
文件夾,在模版中加載的時候就是使 用app名/book.jpg
,這樣就可以避免產生混淆。)
注意: 文件夾的名字必須為static
。
4、如果有一些靜態文件是不和任何app
掛鈎的。即不再任何一個app的目錄下。那么可以在settings.py
中添加STATICFILES_DIRS
,以后DTL
就會在這個列表的路徑中查找靜態文件。例如我們在manage.py
的同級目錄下新建一個static
的文件夾。然后在settings.py
:中添加STATICFILES_DIRS
STATICFILES_DIRS = [
os.path.join(BASE_DIR,"static")
]
注: 第三種和第四種方法都可以加載靜態文件,我的個人習慣是在manage.py
的同級目錄下新建一個static
文件夾,然后將所有的靜態文件進行分類的在里面存儲。而不去app中新建一個static
的文件夾。但這只是我的個人習慣。畢竟不管是黑貓白貓,能抓到老鼠的就是好貓,所以只要我們能把項目做出來能運行,並且代碼結構有邏輯性、層次感就行了。
5、在模版中使用load
標簽加載static
標簽。比如要加載在項目的static
文件夾下的style.css
的文件。那么示例代碼如下:
{% load static %} <link rel="stylesheet" href="{% static 'style.css' %}">
注意: {% load static %}
需要放在html的頭部位置(至少在使用static
標簽的上面),一般都是放在html的最上面。如果{% extend %}
標簽和{% load static %}
同時存在,{% extend %}
需要放在最上面,然后再放{% load static %}
等標簽。
6、如果不想每次在模版中加載靜態文件都使用load
加載static
標簽,那么可以在settings.py
中的TEMPLATES/OPTIONS
添加'builtins':['django.templatetags.static']
,這樣以后在模版中就可以直接使用static
標簽,而不用手動的load
了。
注意: 位置不要添加錯誤了
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
#添加在這個位置
'builtins' : [
'django.templatetags.static'
],
},
},
]
下面的不常用,但是可以了解一下。
7、如果沒有在settings.INSTALLED_APPS
中添加django.contrib.staticfiles
。那么我們就需要手動的將請求靜態文件的url
與靜態文件的路徑進行映射了。示例代碼如下:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# 其他的url映射
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
但平時我們並不會用到這個,Django內置已經將django.contrib.staticfiles
添加進去了的,我們為什么要給他刪除來自找麻煩呢?放在這里也只是提供一個參考,了解一下。
最后分享一個快捷鍵的使用:在我們寫項目的時候,有時候修改了代碼而沒有效果,這是因為瀏覽器使用的緩存加載,這個時候我們就可以使用這個快捷鍵來不使用緩存加載一個文件,來達到查看修改代碼之后的效果的目地。