應用就是網站中的一個獨立的程序模塊,在Django 中,主目錄通常不處理用戶的具體請求,css
主目錄主要作的是項目的初始化和設置,以及請求的分發。html
1. 建立應用命令數據庫
./manage.py startapp 應用名稱django
2. 註冊應用後端
建立完應用後,必須在settings.py中進行註冊服務器
在文件中找到INSTALLED_APPS(列表)中加上註冊的應用名app
3.應用的結構組成函數
migrations(目錄) ------> 存放數據庫中間文件(日誌文件)oop
__init__.py ------> 應用的初始化文件測試
admin.py ------> 應用的後臺管理配置文件
apps.py ------> 應用的屬性配置文件
models.py ------> 模型文件,與數據庫相關
tests.py ------> 測試模塊
views.py ------> 定義視圖的文件
模板是要動態給用戶呈現的網頁內容,其實就是一個網頁(一個先後端結合的網頁)。
模板的設置與settings.py中TEMPLATES變量(列表)相關,裏面存放的字典。
BACKEND: 指定模板的搜索引擎(通常不用更改)
DIRS:指定模板的存放的目錄,若是爲空,Django會到應用中去搜索名爲templates
的目錄,做爲模板的管理目錄。
例如: DIRS = ['index.temp'] ----> 表示指定index應用的模板存放目錄爲temp
ps: 這裏通常都是爲空,而後在每一個應用中建立一個templates目錄。
APP_DIRS:(布爾值)爲True則表示,先從DIRS中指定的目錄中查找模板,
沒有再搜templates目錄
一、使用loader獲取模板,經過HttpResponse進行響應
from django.shortcuts import render
from django.template import loader
def login_views(request): # 加載模板,login.html爲模板文件 te = loader.get_template('login.html') # 將模板渲染成字符串 html = te.render() # HttpResponse響應給客戶端 return HttpResponse(html)
2.使用render直接加載模板並返回(推薦)
from django.shortcuts import render
def login_views(request): # 將模板渲染,並返回 return render(request, 'login.html')
將後端的數據傳遞給模板,在模板中,會根據變量的值進行顯示。
在Django中,容許傳遞給模板的數據類型,數值類型、字符串、列表、元組、字典、函數、對象
# loader 方式 def login_views(request): dic = { 'user': 'laige', 'pwd': '123456' } te = loader.get_template('login.html') html = te.render(dic) return HttpResponse(html) # render 方式 def login_views(request): dic = { 'user': 'laige', 'pwd': '123456' } # 將模板渲染,並返回 return render(request, 'login.html', dic) # 將本地變量傳入 -- locals() def login_views(request): dic = { 'user': 'laige', 'pwd': '123456' } # 將模板渲染,並返回 return render(request, 'login.html', locals())
標籤能夠將服務器中的一些功能嵌入到模板中
基本語法:{% 標籤內容 %}
經常使用的一些標籤:
<!-- for 循環 容許使用 for 提供的內置變量 - forloop 一、forloop.counter 記錄當前循環的次數,從1開始 二、forloop.first 是不是第一次循環(第一項) 三、forloop.last 是不是最後一次循環(最後一項) --> {% for 變量 in 迭代對象 %} <h3>hello hello !</h3> {% endfor %} <!-- if 條件 ps: 注意條件中and和or不能同時出現 --> {% if 條件 %} <p> 知足條件,執行!</p> {% elif 條件1 %} <p> 知足條件1,執行!</p> {% else %} <p>不知足以上條件,執行!</p> {% endif %}
ps:這裏只是舉了兩個經常使用的例子,
具體更多的標籤內容能夠查看文檔:https://docs.djangoproject.com/en/2.0/ref/templates/builtins/
過濾器主要是在顯示變量的數據以前,對數據進行篩選和改變
基本語法:{{ 變量|過濾器:參數 }}
幾個簡單的過濾器:
<!-- 將value變爲大寫字符 --> {{value|upper}} <!-- 將value變爲小寫字符 --> {{value|lower}} <!-- 將num累加到value以後 --> {{value|add:num}} <!-- 將value四捨五入到n位小數 --> {{value|floatformat:n}} <!-- 將字符串截取到n位(包含...) --> {{value|truncatechars:n}}
ps:具體更多的過濾器內容能夠查看文檔:https://docs.djangoproject.com/en/2.0/ref/templates/builtins/
這裏的靜態文件指的是不須要嵌入到服務器端的內容的文件,
好比:圖片、css、js、html都屬於靜態文件
在Django中靜態文件的處理,須要在settings.py中設置靜態文件的訪問和存儲路徑:
# 一、指定靜態文件訪問路徑: # 當訪問路徑是:http://localhost:8000/static/*** 一概到靜態文件存儲路徑中搜索靜態文件 STATIC_URL = '/static/' # 二、指定靜態文件存儲路徑: # 在項目中的static目錄中以及全部應用中的static目錄中存放的都是靜態文件 STATICFILES_DIRS=(BASE_DIR, 'static')
Django中訪問靜態文件:
<!-- 直接使用localhost:8000/static/*** --> <img src='/static/***'> <!-- 在模板的最頂層增長 --> {% load static %} <!-- 使用{% static %}訪問靜態文件資源 --> <img src="{% static 'img/logo.jpg' %}">
當多個模板(網頁)具有大部分相同內容時,可使用繼承的方式,將相同的內容
繼承過來,再增長、修改屬於本身的內容便可。
基礎語法:
<!-- 父模板 --> <!-- 必須在父模板中標識出哪些內容時容許被修改的 --> <!-- block標籤,定義子模板容許被修改的內容 在子模板中,若是不修改block中內容,則按照父模板中內容正常顯示 --> {% block 名稱 %} 父模板正常顯示,可在子模板修改的內容 {% endblock %}
<!-- 子模板 --> <!-- 在最頂端增長,繼承父模板 login.html是父模板的文件名稱 --> {% extents 'login.html' %} <!-- 增長block標籤, 修改須要更改的內容 這裏修改的內容必須是在父模板中使用block定義過的 --> {% block 名稱 %} 子模板本身的內容 {% endblock %}
*這裏補充一個內容:
urls.py路由文件中的url函數,url有個name參數,是指定路徑的別名的。
url(r'^login/$', login_views, name='login')
只有定義以後,能夠在模板中使用url的別名:
{% url '別名' %}
例如:
<a href={% url 'login' %}>登陸</a>
這樣點擊登陸這個連接,就會根據別名,跳轉到login_views視圖
未完待續......