1. 程式人生 > >django 靜態資源配置詳解

django 靜態資源配置詳解

學習了django1.8的Managing static files一章,自己動手實驗之後仍遇到幾個問題,通過閱讀saticfiles模組部分的原始碼終於理解了當中奧妙。

開發環境的入門配置

開發環境即設DEBUG=True
1. 確保INSTALLED_APPS安裝了django.contrib.staticfiles模組
2. 定義STATIC_URL:如STATIC_URL = '/static/'
3. 在模板中訪問可以有三種方式:直接硬編碼像/static/×××.jpg這樣,或是使用static標籤,如
{% load staticfiles %}
<img src="{% static "my_app/myexample.jpg" %}" alt="My image"/>

,我常使用{{STATIC_URL}}×××.jpg 來寫靜態路徑的(必須使用RequestContext進行渲染,否則無法引用STATIC_URL的值)。
4. 在/static/目錄下存放靜態檔案。
總結起來,基本配置就是這四點。
但是,其中有個問題,/static/指定的是哪個目錄。

靜態資源將利用STATICFILES_FINDERS指定的搜尋器搜尋路徑下面的STATIC_URL指定目錄。STATICFILES_FINDERS預設依次包含:

  • FileSystemFinder:在檔案系統裡搜尋STATICFILES_DIRS指定目錄。預設不包含任何目錄
  • AppDirectoriesFinder:搜尋INSTALLED_APPS
    註冊過的應用目錄

因此,使用入門級配置的正常情況下就是在project註冊app,然後在app目錄下存放static目錄。

下面情況無法訪問靜態資源

  • 資源存放在project下的static目錄,沒有在settings.py中設定STATICFILES_DIRS為(os.path.join(BASE_DIR, “static”)

靜態資源的高階配置

不使用django.contrib.staticfiles模組時,可以利用django.views.static.serve提供靜態資源。用法簡單,只要在urls.py使用下面的程式碼:

from django.conf import
settings from django.conf.urls.static import static urlpatterns = [ # ... the rest of your URLconf goes here ... ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

static(prefix, view=serve, ××kwargs)會返回一個Url,該url會由django.views.static.serve進行響應。serve方法純粹使用檔案系統來搜尋資原始檔。STATIC_URL作為訪問url裡資源的字首,STATIC_ROOT必須是資原始檔的絕對檔案路徑。舉例如下:

STATIC_ROOT='/home/user/MySite/static/'
STATIC_URL=statics

訪問時http://localhost:8000/statics/*.img。程式碼會查詢statics資源字首,擷取後面的路徑如*.img再與STATIC_ROOT路徑拼接,進而訪問資原始檔。

應學會靈活使用static(prefix, view=serve, ××kwargs),上面使用了STATIC_URLSTATIC_ROOT,但要意識到只要引數正確,傳什麼都可以。這種靜態資源的使用方式簡單粗暴,即使不是開發環境也能適用哦。唯一缺點不適合商用。

生產環境的靜態資源部署

先介紹下執行python manage.py collectstatic命令,配合STATIC_ROOT,會自動將各個app下的靜態檔案集中到STATIC_ROOT目錄下。

生產環境就是利用專門的靜態檔案伺服器提供服務。

網站和靜態檔案位於同一臺伺服器上

如果你的靜態檔案和網站位於同一臺伺服器,流程可能像是這樣:

  • 將你的程式碼推送到部署的伺服器上。
  • 在這臺伺服器上,執行collectstatic 來收集所有的靜態檔案到STATIC_ROOT。
  • 配置Web伺服器來託管URL STATIC_URL下的STATIC_ROOT。 例如,參考使用Apache 和mod_wsgi 來完成它

想自動化這個過程,特別是有多臺Web 伺服器。有許多種方法來完成這個自動化,但是許多Django 開發人員喜歡 Fabric。
一個部署靜態檔案來多臺Web 伺服器上的Fabric 指令碼大概會是:

from fabric.api import *

# Hosts to deploy onto
env.hosts = ['www1.example.com', 'www2.example.com']

# Where your project code lives on the server
env.project_root = '/home/www/myproject'

def deploy_static():
    with cd(env.project_root):
        run('./manage.py collectstatic -v0 --noinput')

靜態檔案位於一臺專門的伺服器上

執行collectstatic 來收集所有的靜態檔案到STATIC_ROOT。利用rsync ,傳輸靜態檔案改變的部分到各伺服器。

下面是Fabric 指令碼大概的樣子:

from fabric.api import *
from fabric.contrib import project

# Where the static files get collected locally. Your STATIC_ROOT setting.
env.local_static_root = '/tmp/static'

# Where the static files should go remotely
env.remote_static_root = '/home/www/static.example.com'

@roles('static')
def deploy_static():
    local('./manage.py collectstatic')
    project.rsync_project(
        remote_dir = env.remote_static_root,
        local_dir = env.local_static_root,
        delete = True
    )

靜態檔案位於一個雲服務或CDN上

使用自定義檔案儲存後端

to be continue…

相關推薦

django 靜態資源配置

學習了django1.8的Managing static files一章,自己動手實驗之後仍遇到幾個問題,通過閱讀saticfiles模組部分的原始碼終於理解了當中奧妙。 開發環境的入門配置 開發環境即設DEBUG=True 1. 確保INSTALL

Springboot系列(四)web靜態資源配置

Springboot系列(四)web靜態資源配置 往期精彩 SpringBoot系列(一)idea新建Springboot專案 SpringBoot系列(二)入門知識 SpringBoot系列(三)配置檔案詳解完整版 引言: SpringBoot web專案開發中往往會涉及到一些靜態資源的使用,比如說圖

Django模版中載入靜態檔案配置

1、settings.INSTALLED_APPS下新增:django.contrib.staticfiles 2、settings.py下新增:STATIC_URL = '/static/' 3、

深入Spring Boot (七):靜態資源使用

Web應用經常需要使用大量的靜態資源,如圖片、css、js等,Spring Boot對這些靜態資源的使用提供了預設配置。本篇將詳細介紹如何使用預設配置和如何修改這些預設配置,主要包含以下5部分內容: 1.靜態資源儲存路徑; 2.靜態資源訪問路徑; 3.最佳

django setting.py配置

import os # Build paths inside the project like this: os.path.join(BASE_DIR, ...) # __file__ 這個變數可以獲得當前檔案的路徑 # os.path.abspath(__file__)指

靜態資源web伺服器配置

一、Nginx概述  1.Nginx簡介 解決基於程序模型產生的C10k問題,請求時即使無狀態連線如web服務都無法達到併發響應量級一萬現狀。2006年俄羅斯編寫。全稱為engine X,縮減合併稱為nginx。官方站點:http://ngin

Django 發送email配置及各種錯誤類型

cut disco nal tac and ucc odi 添加 bject 跟隨Django Book的內容發送郵件不成功,總結一下需要配置好settings.py文件,還要註意一些細節。 1、在settings文件最後添加以下內容,缺一不可! EMAIL_HOST=

Django中static(靜態)檔案以及{% static %}標籤的使用

想要深入學習Django的可以看一些這個視訊:超細講解Django打造大型企業官網 在一個網頁中,不僅僅只有一個html骨架,還需要css樣式檔案,js執行檔案以及一些圖片等。因此在DTL中載入靜態檔案是一個必須要解決的問題。在DTL中,使用static標籤來載入靜態檔案。要使用stat

Django 2.0 新款URL配置

Django2.0釋出後,很多人都擁抱變化,加入了2的行列。 但是和1.11相比,2.0在url的使用方面發生了很大的變化,下面介紹一下: 一、例項 先看一個例子: from django.urls import path from . import views urlpattern

Django配置

–總結Django中使用到的配置,以及在什麼情況下進行什麼樣的配置 基礎認識 Django 的設定檔案包含你安裝的Django 的所有配置,設定檔案只是一個Python 模組,帶有模組級別的變數。 比如下面圖片展示的設定: 注意,如果專案在上線的時候,是不能將

django連線資料庫和靜態資源配置

帶有條件查詢filterxclude  排序查詢: order_by() 分頁 [:] html django標籤如何使用標籤{%csrf_token%}{%ul%}{%for%}{%endfor%}{%if%}  {%else%}  {%endif%}   -------

Django之載入靜態資源配置、模板配置、mysq資料庫配置、快取配置

1.載入靜態資源:在專案中建立名為‘static’的資料夾,裡面可以放置靜態檔案(css,img,js….等資料夾),在HTML檔案中先呼叫{% load static%}。 STATICFILES_DIRS = [ os.path.join(BAS

configure配置,動靜態庫編譯及Cmake配置

       最近在配置mapserver一整套環境,本來動態庫好好地,老闆讓搞成一個檔案,得,那基本就是靜態庫了,靜態庫合併看我發的另一個文章有說,本篇光說動靜態庫編譯。        編譯是依靠配置configure的各個屬性來配置的,一般常用的基本也就 prefix(

setting.xml 配置

校驗 找不到 順序 裁剪 全局 -- mls leg 觸發 文件存放位置 全局配置: ${M2_HOME}/conf/settings.xml 用戶配置: ${user.home}/.m2/settings.xml note:用戶配置優先於全局配置。${user.home}

【Spring】Spring MVC原理及配置

進行 return sub sca scrip uil 線程安全 松耦合 必須 1.Spring MVC概述: Spring MVC是Spring提供的一個強大而靈活的web框架。借助於註解,Spring MVC提供了幾乎是POJO的開發模式,使得控制器的開發和測試更加簡

kafka參數配置

kafka 參數 broker.idbroker的唯一標識符,如果不配置則自動生成,建議配置且一定要保證集群中必須唯一,默認-1log.dir日誌數據存放的目錄,默認/tmp/kafka-logslog.dirs日誌數據存放的目錄,如果沒有配置則使用log.dir,建議此項配置。zookeeper.c

Lnux系統網卡綁定配置

ole osd 接口 當前 onf prim multi pac lin 一、CentOS 配置網卡綁定(bonding) 1、bonding概述 (1)作用:就是將多塊網卡綁定同一IP地址對外提供服務,可以實現高可用或者負載均衡。當然,直接給兩塊網卡設置同一IP地址是不可

Nginx配置

set 文件結構 時也 解決方案 ces 反向代理服務器 use 力量 第三方模塊 最近在搞nginx和tomcat 以及apache的集群。下面是參考的一片很不錯的關於nginx配置的詳細講解: http://www.cnblogs.com/knowledgesea/p/

Apache配置

搜索 相對 第一個 form 執行權限 php 時有 多個 direct Apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd.conf文件中修改。 主站點的配置(基本配置) (1) 基本配置: ServerRoot "/mnt/softwa

緩存varnish的管理及配置

啟動 一個 hint 單位 quad spec int rom try 一 工作原理 在當前主流的Web服務架構體系中,Cache擔任著越來越重要的作用。常見的基於瀏覽器的C/S架構,Web Cache更是節約服務器資源的關鍵。而最近幾年由FreeBSD創始人之一Kamp開