摘要:改寫視圖函數(shù)上一章我們感受了視圖的工作流程。循壞表示依次取出中的元素,命名為,并分別執(zhí)行接下來操作。即為語言,中間包裹了一個段落的文字。有疑問請在杜賽的個人網(wǎng)站留言,我會盡快回復(fù)。
改寫視圖函數(shù)
上一章我們感受了視圖的工作流程。
為了讓視圖真正發(fā)揮作用,改寫article/views.py中的article_list視圖函數(shù):
article/views.py from django.shortcuts import render # 導(dǎo)入數(shù)據(jù)模型ArticlePost from .models import ArticlePost def article_list(request): # 取出所有博客文章 articles = ArticlePost.objects.all() # 需要傳遞給模板(templates)的對象 context = { "articles": articles } # render函數(shù):載入模板,并返回context對象 return render(request, "article/list.html", context)
代碼同樣很直白,分析如下:
.models表示從當(dāng)前文件夾的models.py文件中導(dǎo)入ArticlePost數(shù)據(jù)類
ArticlePost.objects.all()從ArticlePost數(shù)據(jù)類獲得所有的對象(即博客文章),并傳遞給articles變量
context定義了需要傳遞給模板的對象,即articles
最后返回了render函數(shù):
第一個變量是固定的request對象,照著寫就可以
第二個變量定義了模板文件的位置、名稱,即article/list.html
第三個變量定義了需要傳入模板文件的對象,即context
視圖函數(shù)這樣就寫好了。
編寫模板(template)在前面的視圖中我們定義了模板的位置在article/list.html,因此在根目錄下新建templates文件夾,再新建article文件夾,再新建list.html文件,即:
my_blog │ ... ├─article │ ... └─my_blog │ ... └─templates └─ article └─ list.html
細心的你肯定注意到了,之前的Django文件后綴都是.py,代表Python文件;這里的模板文件后綴是.html,這又是什么呢?
HTML是一種用于創(chuàng)建網(wǎng)頁的標記語言。它被用來結(jié)構(gòu)化信息,標注哪些文字是標題、哪些文字是正文等(當(dāng)然不僅僅這點功能)。也可以簡單理解為“給數(shù)據(jù)排版”的文件,跟你寫文檔用的Office Word一樣一樣的 。
在list.html文件中寫入:
templates/article/list.html {% for article in articles %}{{ article.title }}
{% endfor %}
作為一個Web框架,Django通過模板來動態(tài)生成HTML,其中就包含描述動態(tài)內(nèi)容的一些特殊語法:
{% for article in articles %}:articles為視圖函數(shù)的context傳遞過來的對象,即所有文章的集合。{% for %}循壞表示依次取出articles中的元素,命名為article,并分別執(zhí)行接下來操作。末尾用{% endfor %}告訴Django循環(huán)結(jié)束的位置。
使用.符號來訪問變量的屬性。這里的article為模型中的某一條文章;我們在前面的ArticlePost中定義了文章的標題叫title,因此這里可以用article.title來訪問文章的標題。
...
即為html語言,中間包裹了一個段落的文字。在上一章中已經(jīng)定義好了urls.py,因此不再需要改動。
一切都很好,深吸一口氣。保存所有文件,在瀏覽器中輸入地址http://127.0.0.1:8000/article/article-list/,得到以下錯誤:
似乎成功從來都不會很順利。
錯誤分析雖然出錯了,但幸運的是Django提供了非常完善的錯誤處理系統(tǒng),方便開發(fā)者快速找到Bug的蛛絲馬跡。
第一行就醒目地提示:TemplateDoesNotExist,說明Django沒有找到list.html這個文件。仔細檢查目錄、文件的名稱無誤,沒問題就往下繼續(xù)看。
然后發(fā)現(xiàn)有這么兩行:
...djangocontribadmin emplatesarticlelist.html (Source does not exist) ...djangocontribauth emplatesarticlelist.html (Source does not exist)
似乎Django在這兩個位置搜索,沒有發(fā)現(xiàn)需要的文件,然后返回了“未發(fā)現(xiàn)模板文件”的錯誤。
定位了問題的所在,接下來就是在哪里“告訴”Django我的模板的位置呢?
答案就在settings.py中了,它保存了Django項目的各種初始配置。
打開并找到這一段,加入代碼os.path.join(BASE_DIR, "templates"):
my_blog/settings.py TEMPLATES = [ { ... # 定義模板位置 "DIRS": [os.path.join(BASE_DIR, "templates")], ... }, ]
這就是說模板文件在項目根目錄的templates文件夾中,去找找吧。
很好,保存文件,重新啟動服務(wù)器,刷新瀏覽器,如下:
成功!
雖然簡陋,但是已經(jīng)完全走通了MTV(model、template、view)整個環(huán)路。
不要激動,精彩的還在后面。
總結(jié)本章我們重寫了視圖,編寫了簡單的模板,和前面的模型成功關(guān)聯(lián)起來。
下一章將學(xué)習(xí)編寫一個漂亮的網(wǎng)頁模板。
有疑問請在杜賽的個人網(wǎng)站留言,我會盡快回復(fù)。
或Email私信我:dusaiphoto@foxmail.com
項目完整代碼:Django_blog_tutorial
轉(zhuǎn)載請告知作者并注明出處。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/42460.html
摘要:有編程基礎(chǔ)的同學(xué)都知道,類是面向?qū)ο蠹夹g(shù)中非常重要的概念。有區(qū)別的是,是作為功能添加到子類中的,而不是作為父類。首先調(diào)用父類方法,將這個對象賦值給變量,然后再對其進行統(tǒng)計瀏覽量的操作,最后將對象返回。 說是完結(jié),馬上又開始寫進階篇了。 本章不會為博客項目增加新功能,但是也同樣重要,因為我們要學(xué)習(xí)高逼格的基于類的視圖。 什么是類視圖 前面章節(jié)中寫的所有視圖都是基于函數(shù)的,即def;而類視...
摘要:有了文章列表頁面后,當(dāng)然還需要詳情頁面,方便用戶對某一篇感興趣的文章深入閱讀。編寫視圖函數(shù)打開,增加文章詳情頁面的視圖函數(shù)文章詳情取出相應(yīng)的文章需要傳遞給模板的對象載入模板,并返回對象函數(shù)中多了這個參數(shù)。 有了文章列表頁面后,當(dāng)然還需要詳情頁面,方便用戶對某一篇感興趣的文章深入閱讀。 編寫視圖函數(shù) 打開article/views.py,增加文章詳情頁面的視圖函數(shù)article_deta...
摘要:隨著時間的推移加上勤奮的寫作,你的博客文章一定會越來越多。如果不進行處理,可能同一個頁面會擠上成百上千的文章,不美觀不說,還降低了頁面的反應(yīng)速度。這個時候就需要對文章進行分頁的處理。有疑問請在杜賽的個人網(wǎng)站留言,我會盡快回復(fù)。 隨著時間的推移(加上勤奮的寫作!),你的博客文章一定會越來越多。如果不進行處理,可能同一個頁面會擠上成百上千的文章,不美觀不說,還降低了頁面的反應(yīng)速度。 這個時...
摘要:比如,在一個博客應(yīng)用中,你可能會創(chuàng)建如下幾個視圖博客首頁展示最近的幾項內(nèi)容。這些需求都靠視圖來完成。首先寫一個最簡單的視圖函數(shù),在瀏覽器中打印出字符串。調(diào)用函數(shù)時會返回一個含字符串的對象。換句話說,的作用是將映射到視圖中。 Django 中的視圖的概念是「一類具有相同功能和模板的網(wǎng)頁的集合」。比如,在一個博客應(yīng)用中,你可能會創(chuàng)建如下幾個視圖: 博客首頁:展示最近的幾項內(nèi)容。 內(nèi)容詳情...
摘要:下一步就是修改視圖。判斷語句的條件有兩個博文的標題圖不是必須的,剔除掉沒有標題圖的文章,這些文章不需要處理圖片。總結(jié)本章學(xué)習(xí)了如何上傳并處理文章的標題圖,從此博客首頁就有了漂亮的外觀。 現(xiàn)在雖然博客的功能大都實現(xiàn)了,但是界面還是比較樸素,特別是首頁的文章列表幾乎全是文字,看多了難免疲勞。因此,給每個文章標題配一張標題圖,不僅美觀,用戶也能通過圖片快速了解文章內(nèi)容。實際上大部分社交網(wǎng)站也...
閱讀 3691·2021-11-23 09:51
閱讀 2904·2021-11-23 09:51
閱讀 748·2021-10-11 10:59
閱讀 1776·2021-09-08 10:43
閱讀 3302·2021-09-08 09:36
閱讀 3362·2021-09-03 10:30
閱讀 3354·2021-08-21 14:08
閱讀 2289·2021-08-05 09:59