07 Django 模板

在前面的幾節中咱們都是用簡單的 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 模板進階

相關文章
相關標籤/搜索