Django入門:第八章、模板引擎設置
第八章目錄

第八章、模板引擎設置
回顧
顯示文章標題
創建home.html文件
創建home視圖:
更新urls:
Final成果
第八章、模板引擎設置
回顧
要顯示文章標題,就要把標題從數據庫中先讀取出來。我們在創建BlogArticles模型時,有一個專門的title字段存儲文章標題,那么怎么讀取到它呢?通過前面學習筆記,
一種是通過SQL語句進行查詢 – select語句
另一種就是通過django自帶的API進行讀取,這個功能強大的API還可以創建、獲取、修改和刪除對象
顯示文章標題
在manage.py所在的目錄創建一個名為 templates的新文件夾:
myblog/ | |-- blog | |-- myblog/ | |-- templates/ <-- 這里 | +-- venv/ | +-- db.sqlite3 | +-- manage.py
1
2
3
4
5
6
7
8
建立的目錄如下圖:
創建home.html文件
然后在templates文件夾中,創建一個名為home.html的HTML文件:
templates/home.html
我的博客
{% for blog in blogs %}{% endfor %}
1
2
3
4
5
6
7
8
9
10
11
12
13
在home中,我們使用了原始HTML和一些特殊標簽 {% for ... in ... %} 和 {{ variable }} 。它們是django模板語言的一部分。
Django模板語言都需要用到{}花括號,塊標簽{%block name %},用來包裹塊內容,表示其間的內容可以自定義,name是塊的名稱。塊結束標簽{% endf-block%}。
上面的例子展示了如何使用 for遍歷列表對象,這一點類似Python的循環語句,{% for blog in blogs %}是循環的開始,{% endfor %}是本循環結束。
{{ blog.title }}雙層花括號的方式表示此處顯示變量引用的數據。blog是從blogs的QuerySet序列中得到的一個實例對象,blog.title是某個實例的title字段,我們通過這種方式獲得一片博客的標題,最后生成動態HTML文檔。
在使用這個HTML頁面之前,我們必須告訴Django在哪里可以找到我們應用程序的模板(注:如果是利用Pycharm創建的Django項目,則會自動生成templates)。
打開myproject目錄下面的settings.py文件,搜索TEMPLATES變量,并設置DIRS 的值為 os.path.join(BASE_DIR, 'templates'):
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')] , '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', ], }, }, ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
創建home視圖:
在我們完成對home模板創建完成后,接下來開始寫home()函數:
blog/views.py
from django.shortcuts import render from .models import BlogArticles # Create your views here. def home(request): blogs = BlogArticles.objects.all() return render(request, "home.html", {"blogs":blogs})
1
2
3
4
5
6
7
8
還記得當初第三章中寫HelloWorld頁面時編寫的welcome()函數嗎?同樣,home()是在視圖文件views.py中編寫的一個函數,這種方式被稱為“基于函數的視圖”,這個函數就叫“視圖函數”,后面還將學到“基于類的視圖”。
為了響應用戶請求,然后我們利用前面交互模式中使用的語句blogs = BlogArticles.objects.all(),得到所有的BlogArticles類實例。
然后再以return結束當前函數,并返回結果。
render()的作用是將數據渲染到指定模板,第一個參數必須是request,然后是模板位置和所傳送的數據,數據是用類字典的形式傳送給模板的。
home.html就是展示標題列表的前端頁面–被稱為“模板”。在每一個應用中都可以有一個專門的模板目錄,這個目錄的名稱必須是templates。
{"blogs":blogs}向模板文件home.html中傳入blogs變量所引用的QuerySet對象,其包含所有BlogArticles類的實例對象,即從數據庫中讀取所有記錄,并在模板文件中以變量blogs({"blogs":blogs})中的鍵blogs來代表。
更新urls:
函數和模板都寫好了之后,我們還需要做一項工作,就是進行URL配置,相信大家在學完第三章后應該知道在哪個文件中進行URL配置了吧,對就是myblog/urls.py文件中。增加如下新增代碼:
myblog/urls.py
from django.contrib import admin from django.urls import path from django.conf.urls import url # 新增 from blog import views # 新增 urlpatterns = [ path('admin/', admin.site.urls), url(r'^$', views.home, name='home'), # 新增 ]
1
2
3
4
5
6
7
8
9
10
Final成果
最后在瀏覽器中打開 http://127.0.0.1:8000/,結果如下圖,能一個簡單的HTML頁面展示:
可以看到,自己創建的博客文章標題已經顯示在瀏覽器中,相信到這一步你已經激動不已(筆者也是)。細心的讀者可以會問了,只是展示了標題,可是并不能通過點擊博客文章標題查看博客內容,對,下一章的任務就是帶領大家完成查看博客文章。
注:Django入門筆記匯總博客
Django HTML
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。