Django搭建個人博客:改寫View視圖

改寫視圖函數

上一章我們感受了視圖的工作流程。

**爲了讓視圖真正發揮作用,**改寫article/views.py中的article_list視圖函數:

article/views.py

from django.shortcuts import render

# 導入數據模型ArticlePost
from .models import ArticlePost

def article_list(request):
	# 取出所有博客文章
	articles = ArticlePost.objects.all()
	# 需要傳遞給模板(templates)的對象
	context = { 'articles': articles }
	# render函數:載入模板,並返回context對象
	return render(request, 'article/list.html', context)

代碼同樣很直白,分析如下:

  • .models表示從當前文件夾的models.py文件中導入ArticlePost數據類
  • ArticlePost.objects.all()ArticlePost數據類獲得所有的對象(即博客文章),並傳遞給articles變量
  • context定義了需要傳遞給模板的對象,即articles
  • 最後返回了render函數:
    • 第一個變量是固定的request對象,照着寫就可以
    • 第二個變量定義了模板文件的位置、名稱,即article/list.html
    • 第三個變量定義了需要傳入模板文件的對象,即context

視圖函數這樣就寫好了。

編寫模板(template)

在前面的視圖中我們定義了模板的位置在article/list.html,因此在根目錄下新建templates文件夾,再新建article文件夾,再新建list.html文件,即:

my_blog
│  ...
├─article
│  ...
└─my_blog
│  ...
└─templates
    └─ article
        └─ list.html

細心的你肯定注意到了,之前的Django文件後綴都是.py,代表Python文件;這裏的模板文件後綴是.html,這又是什麼呢?

**HTML是一種用於創建網頁的標記語言。**它被用來結構化信息,標註哪些文字是標題、哪些文字是正文等(當然不僅僅這點功能)。也可以簡單理解爲“給數據排版”的文件,跟你寫文檔用的Office Word一樣一樣的 。

list.html文件中寫入:

templates/article/list.html

{% for article in articles %}
	<p>{{ article.title }}</p>
{% endfor %}

作爲一個Web框架,Django通過模板來動態生成HTML,其中就包含描述動態內容的一些特殊語法:

  • {% for article in articles %}articles爲視圖函數的context傳遞過來的對象,即所有文章的集合。{% for %}循壞表示依次取出articles中的元素,命名爲article,並分別執行接下來操作。末尾用{% endfor %}告訴Django循環結束的位置。

  • 使用.符號來訪問變量的屬性。這裏的article爲模型中的某一條文章;我們在前面的ArticlePost中定義了文章的標題叫title,因此這裏可以用article.title來訪問文章的標題。

  • <p>...</p>即爲html語言,中間包裹了一個段落的文字。

在上一章中已經定義好了urls.py,因此不再需要改動。

一切都很好,深吸一口氣。保存所有文件,在瀏覽器中輸入地址http://127.0.0.1:8000/article/article-list/,得到以下錯誤:

似乎成功從來都不會很順利。

錯誤分析

雖然出錯了,但幸運的是Django提供了非常完善的錯誤處理系統,方便開發者快速找到Bug的蛛絲馬跡。

第一行就醒目地提示:TemplateDoesNotExist,說明Django沒有找到list.html這個文件。仔細檢查目錄、文件的名稱無誤,沒問題就往下繼續看。

然後發現有這麼兩行:

...django\contrib\admin\templates\article\list.html (Source does not exist)
...django\contrib\auth\templates\article\list.html (Source does not exist)

似乎Django在這兩個位置搜索,沒有發現需要的文件,然後返回了“未發現模板文件”的錯誤。

定位了問題的所在,接下來就是在哪裏“告訴”Django我的模板的位置呢?

答案就在settings.py中了,它保存了Django項目的各種初始配置。

打開並找到這一段,加入代碼os.path.join(BASE_DIR, 'templates')

my_blog/settings.py

TEMPLATES = [
    {
        ...
        # 定義模板位置
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        ...
    },
]

這就是說模板文件在項目根目錄的templates文件夾中,去找找吧。

很好,保存文件,重新啓動服務器,刷新瀏覽器,如下:



成功!

雖然簡陋,但是已經完全走通了MTV(model、template、view)整個環路。

不要激動,精彩的還在後面。

總結

本章我們重寫了視圖,編寫了簡單的模板,和前面的模型成功關聯起來。

下一章將學習編寫一個漂亮的網頁模板。

轉載請告知作者並註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章