作網站,不會前端老是不行的,就算本身不深刻學習成爲前端大拿,套用別人的css和js總仍是要會的,所以,靜態文件的引用成爲了一個topic。css
Django建立一個新項目的時候已經默認產生了一些配置,應對小項目足夠了,若是追求完美的話,總還須要多瞭解一些。列出瞭如下topic。html
一、 一個不作任何額外配置的django項目能怎麼處理static?前端
二、 好好規劃的static文件目錄又是什麼樣子的?web
三、 部署到生產該怎麼辦?django
四、 Django中誰在管理着這些static文件?純代碼層面了喲編程
答:windows
一、 沒有額外本身添加配置時,和static文件有關的settings,以下(從settings.py中摘出來的)session
# Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'systemadmin.apps.SystemadminConfig', ] # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/2.0/howto/static-files/ STATIC_URL = '/static/'
BASE_DIR -->項目的根目錄,註釋裏都寫了,若是想要獲得項目中的文件路徑,用os.path.join(BASE_DIR,….)app
INSTALLED_APPS --> 管理staticfiles的Django自帶APP,就是這個django.contrib.staticfileside
STATIC_URL --> 文件夾取名要叫static,和BASE_DIR配合,用來找到文件的
有了這些配置,若是咱們要有css js image文件須要被html引用,那麼須要聽從如下作法:
1) 在建立的app目錄下新建static文件夾,下面再建立app同名文件夾,這兩個文件夾是必須的,再下層的目錄隨你喜歡,好比再建css js image文件夾,裏面分別放你要用的css js和image文件。
2) 在建立的app目錄下新建templates文件夾,下面再建立app同名文件夾,這兩個文件夾是必須的,下面放要用的html文件。
3) 讓html文件找到這些css js image文件須要:
a) Html的head標籤中
{% load static %}
b) Head中Css的href用static拼路徑
{% static ‘APP名字/path/css文件’ %}
c) Body末尾Js的src也用static拼路徑
{% static ‘APP名字/path/js文件’ %}
d) 靜態文件的相互引用,好比css裏面加了一個背景圖片,load static不起做用了喲,要用相對路徑去取
url(「相對路徑」)
二、 1的基本配置在什麼狀況下不夠用呢?不夠用,就得本身加配置哦。
代碼重用,在任何語言編程中都是須要的,在模板的編寫中也同樣,Django支持模板的繼承和包含,所以,基本frame的html(頁面佈局),常組件的html(輸入框、下拉框、多選框啦什麼的)會想固然得放一塊兒,你們都用css js放一塊兒,而單獨APP用到的html css js image放在APP的templates和static裏面。因而造成了一個龐大的目錄結構。
基於以上目錄的安排,僅有基本配置可找不到相應的文件哦,須要修改。
1) 項目的settings.py中,增長STATICFILES_DIRS的[],表示除了app的static文件夾,還要找list中列出的這些地方。咱們把根目錄下的static文件夾加進去,公用的這些css js和image就能找到了
2) Html中仍是須要load static,再用{% static ‘相對路徑’%}去拼路徑,獲取文件
3) APP中是繼承和包含基礎的html,那麼用{%extend ’相對路徑‘%}和{% include ‘相對路徑’ %}就好了
三、 部署在生產環境中,一般會將全部的static文件都放在一個地方,以方便管理。而開發模式下,咱們已經從2看到了龐大的目錄結構,手動去提取不現實,django提供了管理工具,步驟(生產環境上):
1) 在settings.py中添加配置
STATIC_ROOT='/djangolearn/allstatic/'
2) 控制檯中敲入
Python manage.py collectstatic
運行完成後,console給出提示
204 static files copied to 'C:\djangolearn\allstatic'.
注意了哦,這裏是將全部的static文件所有copy到了上述路徑,而不是項目路徑下面,個人環境是windows的。
3) 把這個全部文件的集合放到一臺web server上提供服務。這裏要分狀況討論。
a) 和django程序在一臺server上
b) 專用一臺server放static
c) 放在雲上
具體的部署還須要看how-to guides -->Deploying Django
四、 代碼層,必須得認可,我尚未這個心性去看源代碼。目前就知道:
1) 「django.contrib.staticfiles」 Django的這個自帶APP承包了對static文件的管理工做
2) Setting.py文件中STATIC_URL指定了全部的app下創建static文件夾的名字,staticfiles這個app會自動去找叫static的文件夾
3) Static文件夾下需再創建一層以APP名字命名的文件夾,以區分彼此
4) 公用的static能夠放在一個目錄下,但須要手動在settings.py文件中添加STATICFILES_DIRS參數的配置。