1. 程式人生 > >Django的靜態檔案圖片、CSS、JS配置和模板展示及URL訪問

Django的靜態檔案圖片、CSS、JS配置和模板展示及URL訪問

我們在通過設定settings.py檔案來實現靜態檔案在模板中調取和url直接訪問

①Django專案資料夾下建立static/images 兩個資料夾

②配置settings.py  (添加了變數STATIC_DIR 、STATICFILES_DIRS 兩個變數,這裡需要注意變數名稱如果不對的話無法訪問到靜態檔案)

# ...省略程式碼...

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMPLATE_DIR = os.path.join(BASE_DIR,'templates')
STATIC_DIR = os.path.join(BASE_DIR,'static')  # 本次新建

# ...省略程式碼...

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [TEMPLATE_DIR,],
        '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',
            ],
        },
    },
]

STATICFILES_DIRS = [STATIC_DIR,]  # 本次新建

# ...省略程式碼...

STATIC_URL = '/static/'  # 注意檢查有沒有這個變數

③重啟Django伺服器即可通過url訪問

重點剖析:

STATIC_DIR 和 STATICFILES_DIRS 這兩個變數是用於伺服器內部呼叫檔案的路徑位置;

STATIC_URL 是用於客戶端通過url來訪問靜態檔案的位置。

【將靜態檔案寫入html模板中】

配置好上面之後我們就可以在html模板中進行呼叫了

<!DOCTYPE html>
	{% load staticfiles %} <!-- 表示要引入靜態檔案,需要放在html標籤前面,避免無法通過驗證 -->
<html>

	<head>
		<title>Rango</title>
	</head>
	
	<body>
		<h1>Rango says...</h1>
		<div>
			hey there partner! <br />
			<strong>{{ boldmessage }}</strong><br />
		</div>
		<div>
			<a href="/rango/about/">About</a><br />
			<img src="{% static "images/rango.jpg" %}" alt="picturt of Rango" /> <!-- 引入指定的靜態檔案 -->
		</div>
	</body>
</html>

【呼叫css和js】

<!DOCTYPE html>
	{% load staticfiles %} <!-- 表示要引入靜態檔案,需要放在html標籤前面,避免無法通過驗證 -->
<html>

	<head>
		<title>Rango</title>
		<!-- 呼叫CSS -->
		<link rel="stylesheet" href="{% static "css/base.css" %}" />
		<!-- 呼叫JS -->
		<script src="{% static "js/jquery.js" %}"></script>

	</head>
	
	<body>
		<h1>Rango says...</h1>
		<div>
			hey there partner! <br />
			<strong>{{ boldmessage }}</strong><br />
		</div>
		<div>
			<a href="/rango/about/">About</a><br />
			<img src="{% static "images/rango.jpg" %}" alt="picturt of Rango" /> <!-- 引入指定的靜態檔案 -->
		</div>
	</body>
</html>

[29/Jul/2018 22:34:20] "GET / HTTP/1.1" 200 640
[29/Jul/2018 22:34:21] "GET /static/css/base.css HTTP/1.1" 404 1649
[29/Jul/2018 22:34:21] "GET /static/js/jquery.js HTTP/1.1" 404 1649

因為我們沒有這個CSS和JS檔案,所以伺服器和客戶端都會報404錯誤。