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