在前面的幾節中咱們都是用簡單的 django.http.HttpResponse 來把內容顯示到網頁上,本節將講解如何使用渲染模板的方法來顯示內容。html
一、在views裏寫一個首頁的視圖python
from django.shortcuts import render def home(request): return render(request, 'home.html')
二、templates 文件夾,裏面新建一個 home.html數據庫
三、將視圖函數對應到網址,修改urls.py文件django
完成以上3步便可實現模板顯示。服務器
四、建立數據庫表app
python manage.py migrate
建立數據庫雖然本節不會用到,可是可讓一些提示消失(提示你要建立數據庫之類的)函數
五、運行開發服務器,看看效果網站
python manage.py runserver
模板補充知識:url
網站模板的設計,通常的,咱們作網站有一些通用的部分,好比 導航,底部,訪問統計代碼等等spa
nav.html, bottom.html, tongji.html
能夠寫一個 base.html 來包含這些通用文件(include)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<!DOCTYPE html>
<
html
>
<
head
>
<
title
>{% block title %}默認標題{% endblock %} - 自強學堂</
title
>
</
head
>
<
body
>
{% include 'nav.html' %}
{% block content %}
<
div
>這裏是默認內容,全部繼承自這個模板的,若是不覆蓋就顯示這裏的默認內容。</
div
>
{% endblock %}
{% include 'bottom.html' %}
{% include 'tongji.html' %}
</
body
>
</
html
>
|
若是須要,寫足夠多的 block 以便繼承的模板能夠重寫該部分,include 是包含其它文件的內容,就是把一些網頁共用的部分拿出來,重複利用,改動的時候也方便一些,還能夠把廣告代碼放在一個單獨的html中,改動也方便一些,在用到的地方include進去。其它的頁面繼承自 base.html 就行了,繼承後的模板也能夠在 block 塊中 include 其它的模板文件。
好比咱們的首頁 home.html,繼承或者說擴展(extends)原來的 base.html,能夠簡單這樣寫,重寫部分代碼(默認值的那一部分不用改)
1
2
3
4
5
6
7
8
|
{% extends 'base.html' %}
{% block title %}歡迎光臨首頁{% endblock %}
{% block content %}
{% include 'ad.html' %}
這裏是首頁,歡迎光臨
{% endblock %}
|
注意:模板通常放在app下的templates中,Django會自動去這個文件夾中找。但 假如咱們每一個app的templates中都有一個 index.html,當咱們在views.py中使用的時候,直接寫一個 render(request, 'index.html'),Django 能不能找到當前 app 的 templates 文件夾中的 index.html 文件夾呢?(答案是不必定能,有可能找錯)
Django 模板查找機制: Django 查找模板的過程是在每一個 app 的 templates 文件夾中找(而不僅是當前 app 中的代碼只在當前的 app 的 templates 文件夾中找)。各個 app 的 templates 造成一個文件夾列表,Django 遍歷這個列表,一個個文件夾進行查找,當在某一個文件夾找到的時候就中止,全部的都遍歷完了還找不到指定的模板的時候就是 Template Not Found (過程相似於Python找包)。這樣設計有利固然也有弊,有利是的地方是一個app能夠用另外一個app的模板文件,弊是有可能會找錯了。因此咱們使用的時候在 templates 中創建一個 app 同名的文件夾,這樣就行了。
這就須要把每一個app中的 templates 文件夾中再建一個 app 的名稱,僅和該app相關的模板放在 app/templates/app/ 目錄下面,
例如:項目 zqxt 有兩個 app,分別爲 tutorial 和 tryit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
zqxt
├── tutorial
│ ├── __init__.py
│ ├── admin.py
│ ├── models.py
│ ├── templates
│ │ └── tutorial
│ │ ├── index.html
│ │ └── search.html
│ ├── tests.py
│ └── views.py
├── tryit
│ ├── __init__.py
│ ├── admin.py
│ ├── models.py
│ ├── templates
│ │ └── tryit
│ │ ├── index.html
│ │ └── poll.html
│ ├── tests.py
│ └── views.py
├── manage.py
└── zqxt
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
|
這樣,使用的時候,模板就是 "tutorial/index.html" 和 "tryit/index.html" 這樣有app做爲名稱的一部分,就不會混淆。
模板中的一些循環,條件判斷,標籤,過濾器等使用請看Django 模板進階。