1. 靜態(tài)文件
一個(gè)網(wǎng)站中除了正常的html頁面之外,還有相應(yīng)的樣式,以及js等其他的文件,我們把除了html網(wǎng)頁外的文件稱之為靜態(tài)資源文件,下面我們介紹一下怎么在django中去加載靜態(tài)資源文件
1.1 加載靜態(tài)資源文件第1種方法:static標(biāo)簽 {% load static %}
在一個(gè)網(wǎng)頁中,不僅僅只有一個(gè)html骨架,還需要css樣式文件,js執(zhí)行文件以及一些圖片等。因此在DTL中加載靜態(tài)文件是一個(gè)必須要解決的問題。在DTL中,使用static標(biāo)簽來加載靜態(tài)文件。要使用static標(biāo)簽,首先需要{% load static %}。加載靜態(tài)文件的步驟如下:
1.首先確保
django.contrib.staticfiles已經(jīng)添加到settings.INSTALLED_APPS中。2.確保在
settings.py中設(shè)置了STATIC_URL。3.在已經(jīng)安裝了的app下創(chuàng)建一個(gè)文件夾叫做
static,然后再在這個(gè)static文件夾下創(chuàng)建一個(gè)當(dāng)前app的名字的文件夾,再把靜態(tài)文件放到這個(gè)文件夾下。
例如你的app叫做book,有一個(gè)靜態(tài)文件叫做logo.jpg,那么路徑為
book/static/book/logo.jpg。(為什么在app下創(chuàng)建一個(gè)static文件夾,還需要在這個(gè)static下創(chuàng)建一個(gè)同app名字的文件夾呢?原因是如果直接把靜態(tài)文件放在static文件夾下,那么在模版加載靜態(tài)文件的時(shí)候就是使用logo.jpg,如果在多個(gè)app之間有同名的靜態(tài)文件,這時(shí)候可能就會(huì)產(chǎn)生混淆。而在static文件夾下加了一個(gè)同名app文件夾,在模版中加載的時(shí)候就是使用app/logo.jpg,這樣就可以避免產(chǎn)生混淆。)
- 4.如果有一些靜態(tài)文件是不和任何app掛鉤的。那么可以在
settings.py中添加STATICFILES_DIRS,以后DTL就會(huì)在這個(gè)列表的路徑中查找靜態(tài)文件。比如可以設(shè)置為:
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR,"static")
]
- 5.在模版中使用load標(biāo)簽加載static標(biāo)簽。比如要加載在項(xiàng)目的static文件夾下的style.css的文件。
{% load static %}
<link rel="stylesheet" href="{% static 'style.css' %}">
1.2 靜態(tài)資源文件的第2種加載方法:不用每次都在頁面中 load static
- 1 如果不想每次在模版中加載靜態(tài)文件都使用load加載static標(biāo)簽,那么可以在s
ettings.py中的TEMPLATES/OPTIONS添加'builtins':['django.templatetags.static'],這樣以后在模版中就可以直接使用static標(biāo)簽,而不用手動(dòng)的load了。
settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'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']
},
},
]
- 2.如果沒有在settings.INSTALLED_APPS中添加django.contrib.staticfiles。
那么我們就需要手動(dòng)的將請(qǐng)求靜態(tài)文件的url與靜態(tài)文件的路徑進(jìn)行映射了。
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# 其他的url映射
] + static(settings.STATIC_URL, document_root=settings.STATICFILES_DIRS[0])
通過第2種的方式的配置我們可以直接頁面中書寫 {% static 'css/index.css '%} 這樣的標(biāo)簽,不用再重復(fù) load