django--static文件的管理

作網站,不會前端老是不行的,就算本身不深刻學習成爲前端大拿,套用別人的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參數的配置。

相關文章
相關標籤/搜索