成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Django搭建個(gè)人博客:改寫View視圖

KaltZK / 2408人閱讀

摘要:改寫視圖函數(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

相關(guān)文章

  • Django搭建個(gè)人博客:基于類的視圖

    摘要:有編程基礎(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;而類視...

    QiShare 評論0 收藏0
  • Django搭建個(gè)人博客:編寫文章詳情頁面

    摘要:有了文章列表頁面后,當(dāng)然還需要詳情頁面,方便用戶對某一篇感興趣的文章深入閱讀。編寫視圖函數(shù)打開,增加文章詳情頁面的視圖函數(shù)文章詳情取出相應(yīng)的文章需要傳遞給模板的對象載入模板,并返回對象函數(shù)中多了這個(gè)參數(shù)。 有了文章列表頁面后,當(dāng)然還需要詳情頁面,方便用戶對某一篇感興趣的文章深入閱讀。 編寫視圖函數(shù) 打開article/views.py,增加文章詳情頁面的視圖函數(shù)article_deta...

    dabai 評論0 收藏0
  • Django搭建個(gè)人博客:文章分頁

    摘要:隨著時(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í)...

    stormgens 評論0 收藏0
  • Django搭建個(gè)人博客View視圖初探

    摘要:比如,在一個(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)容詳情...

    Turbo 評論0 收藏0
  • Django搭建個(gè)人博客:給文章加個(gè)漂亮的標(biāo)題圖

    摘要:下一步就是修改視圖。判斷語句的條件有兩個(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)站也...

    taowen 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<