Python Django中的STATIC_URL 設(shè)置和使用方式
使用Django靜態(tài)設(shè)置時(shí),遇到很多問題,經(jīng)過艱苦的Baidu, stack overflow, Django原檔閱讀,終于把靜態(tài)圖片給搞出來了。特記錄下來。
關(guān)鍵的概念:Django中,靜態(tài)資源的存放通過設(shè)置 STATIC_URL, STATICFILES_DIRS 來設(shè)置,一般STATIC_URL設(shè)置為:/static/
STATIC_URL='/static/', 這個(gè)static 是在Django 具體APP下建立的static目錄,用來存放靜態(tài)資源。而STATICFILES_DIRS一般用來設(shè)置通用的靜態(tài)資源,對(duì)應(yīng)的目錄不放在APP下,而是放在Project下,例如:
STATICFILES_DIRS=(os.path.join(BASE_DIR, "common_static"),)
具體在模板文件中訪問的時(shí)候,都是統(tǒng)一用:/static/資源名的方式,就可以訪問到資源,不論具體的目錄是APP下的static,還是project下的common_static, 都可以用/static/資源名的方式訪問到。
為增強(qiáng)可移植性,在模板中可以用:STATIC_URL來代替具體的/static/來設(shè)置資源路徑,但是需要在settings.py中2個(gè)地方進(jìn)行設(shè)置,否則會(huì)發(fā)生取不到資源的錯(cuò)誤:
1. INSTALLED_APPS 中,加入 'django.contrib.staticfiles'
2. TEMPLATES 中,context_processors中,加入django.template.context_processors.static
模板中調(diào)用時(shí):
<img src="{{STATIC_URL}}pic.jpg " />
補(bǔ)充知識(shí):Django中static(靜態(tài))文件詳解以及{% static %}標(biāo)簽的使用
在一個(gè)網(wǎng)頁(yè)中,不僅僅只有一個(gè)html骨架,還需要css樣式文件,js執(zhí)行文件以及一些圖片等。因此在DTL中加載靜態(tài)文件是一個(gè)必須要解決的問題。在DTL中,使用static標(biāo)簽來加載靜態(tài)文件。要使用static標(biāo)簽,首先需要{% load static %}。
加載靜態(tài)文件的步驟如下:
首先確保django.contrib.staticfiles已經(jīng)添加到settings.INSTALLED_APPS中。
確保在settings.py中設(shè)置了STATIC_URL。
注意: 上面兩條都是在創(chuàng)建Django 項(xiàng)目的時(shí)候就自動(dòng)給我們弄好了,只要我們沒有去改動(dòng)它,就不用管。
在已經(jīng)安裝了的app下創(chuàng)建一個(gè)文件夾叫做static,然后再在這個(gè)static文件夾下創(chuàng)建一個(gè)當(dāng)前app的名字的文件夾,再把靜態(tài)文件放到這個(gè)文件夾下。例如你的app叫做book,有一個(gè)靜態(tài)文件叫做book.jpg,那么路徑為book/static/book/book.jpg。
(為什么在app下創(chuàng)建一個(gè)static文件夾,還需要在這個(gè)static下創(chuàng)建一個(gè)同app名字的文件夾呢?原因是如果直接把靜態(tài)文件放在static文件夾下,那么在模版加載靜態(tài)文件的時(shí)候就是使用book.jpg,如果在多個(gè)app之間有同名的靜態(tài)文件,這時(shí)候可能就會(huì)產(chǎn)生混淆。而在static文件夾下加了一個(gè)同名app文件夾,在模版中加載的時(shí)候就是使用app名/book.jpg,這樣就可以避免產(chǎn)生混淆。)
注意: 文件夾的名字必須為static 。
如果有一些靜態(tài)文件是不和任何app掛鉤的。即不再任何一個(gè)app的目錄下。那么可以在settings.py中添加STATICFILES_DIRS,以后DTL就會(huì)在這個(gè)列表的路徑中查找靜態(tài)文件。例如我們?cè)趍anage.py的同級(jí)目錄下新建一個(gè)static的文件夾。然后在settings.py:中添加STATICFILES_DIRS
STATICFILES_DIRS = [ os.path.join(BASE_DIR,"static") ]
注:第三種和第四種方法都可以加載靜態(tài)文件,我的個(gè)人習(xí)慣是在manage.py的同級(jí)目錄下新建一個(gè)static文件夾,然后將所有的靜態(tài)文件進(jìn)行分類的在里面存儲(chǔ)。而不去app中新建一個(gè)static的文件夾。但這只是我的個(gè)人習(xí)慣。畢竟不管是黑貓白貓,能抓到老鼠的就是好貓,所以只要我們能把項(xiàng)目做出來能運(yùn)行,并且代碼結(jié)構(gòu)有邏輯性、層次感就行了。
在模版中使用load標(biāo)簽加載static標(biāo)簽。比如要加載在項(xiàng)目的static文件夾下的style.css的文件。那么示例代碼如下:
{% load static %}
<link rel="stylesheet" href="{% static 'style.css' %}" rel="external nofollow" >
注意: {% load static %}需要放在html的頭部位置(至少在使用static標(biāo)簽的上面),一般都是放在html的最上面。如果{% extend %}標(biāo)簽和{% load static %}同時(shí)存在,{% extend %}需要放在最上面,然后再放{% load static %}等標(biāo)簽。
如果不想每次在模版中加載靜態(tài)文件都使用load加載static標(biāo)簽,那么可以在settings.py中的TEMPLATES/OPTIONS添加'builtins':[‘django.templatetags.static'],這樣以后在模版中就可以直接使用static標(biāo)簽,而不用手動(dòng)的load了。
注意: 位置不要添加錯(cuò)誤了
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', ], #添加在這個(gè)位置 'builtins' : [ 'django.templatetags.static' ], }, }, ]
下面的不常用,但是可以了解一下。
如果沒有在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.STATIC_ROOT)
但平時(shí)我們并不會(huì)用到這個(gè),Django內(nèi)置已經(jīng)將django.contrib.staticfiles添加進(jìn)去了的,我們?yōu)槭裁匆o他刪除來自找麻煩呢?放在這里也只是提供一個(gè)參考,了解一下。
最后分享一個(gè)快捷鍵的使用:在我們寫項(xiàng)目的時(shí)候,有時(shí)候修改了代碼而沒有效果,這是因?yàn)闉g覽器使用的緩存加載,這個(gè)時(shí)候我們就可以使用這個(gè)快捷鍵來不使用緩存加載一個(gè)文件,來達(dá)到查看修改代碼之后的效果的目地。
ctrl+shift+r 不使用緩存加載一個(gè)文件
以上這篇Python Django中的STATIC_URL 設(shè)置和使用方式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Django路由層URLconf作用及原理解析
- django下創(chuàng)建多個(gè)app并設(shè)置urls方法
- 解決django的template中如果無法引用MEDIA_URL問題
- Django {{ MEDIA_URL }}無法顯示圖片的解決方式
- django ListView的使用 ListView中獲取url中的參數(shù)值方式
- Django模板標(biāo)簽中url使用詳解(url跳轉(zhuǎn)到指定頁(yè)面)
- Django url,從一個(gè)頁(yè)面調(diào)到另個(gè)頁(yè)面的方法
- Django正則URL匹配實(shí)現(xiàn)流程解析
相關(guān)文章
Tensorflow訓(xùn)練模型默認(rèn)占滿所有GPU的解決方案
這篇文章主要介紹了Tensorflow訓(xùn)練模型默認(rèn)占滿所有GPU的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-0520個(gè)Python?random模塊常用函數(shù)的應(yīng)用與代碼示例
隨機(jī)數(shù)在計(jì)算機(jī)科學(xué)和數(shù)據(jù)科學(xué)領(lǐng)域中扮演著重要角色,Python的標(biāo)準(zhǔn)庫(kù)中提供了random模塊,用于生成各種隨機(jī)數(shù),本文將深入探討random模塊的各種函數(shù),以及它們的應(yīng)用場(chǎng)景和代碼示例,需要的可以參考下2024-03-03Python中time庫(kù)的使用(日期時(shí)間)
time庫(kù)是python中處理時(shí)間的標(biāo)準(zhǔn)庫(kù),這篇文章主要介紹了Python中time庫(kù)的使用(日期時(shí)間),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02Python編寫一個(gè)驗(yàn)證碼圖片數(shù)據(jù)標(biāo)注GUI程序附源碼
這篇文章主要介紹了Python編寫一個(gè)驗(yàn)證碼圖片數(shù)據(jù)標(biāo)注GUI程序,本文給大家附上小編精心整理的源碼,需要的朋友可以參考下2019-12-12使用python采集腳本之家電子書資源并自動(dòng)下載到本地的實(shí)例腳本
這篇文章主要介紹了python采集jb51電子書資源并自動(dòng)下載到本地實(shí)例教程,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-10-10python 基于Appium控制多設(shè)備并行執(zhí)行
這篇文章主要介紹了python 如何基于Appium控制多設(shè)備并行執(zhí)行,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-03-03使用Python獲取字典鍵對(duì)應(yīng)值的兩種方法
對(duì)于字典通過鍵獲得值非常簡(jiǎn)單,但通過值獲得鍵則需繞些彎子,下面這篇文章主要給大家介紹了關(guān)于如何使用Python獲取字典鍵對(duì)應(yīng)值的相關(guān)資料,需要的朋友可以參考下2022-04-04