Django搭建我的博客:改寫View視圖

改寫視圖函數

上一章咱們感覺了視圖的工做流程。html

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

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)

代碼一樣很直白,分析以下:git

  • .models表示從當前文件夾的models.py文件中導入ArticlePost數據類
  • ArticlePost.objects.all()ArticlePost數據類得到全部的對象(即博客文章),並傳遞給articles變量
  • context定義了須要傳遞給模板的對象,即articles
  • 最後返回了render函數:github

    • 第一個變量是固定的request對象,照着寫就能夠
    • 第二個變量定義了模板文件的位置、名稱,即article/list.html
    • 第三個變量定義了須要傳入模板文件的對象,即context

視圖函數這樣就寫好了。django

編寫模板(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)整個環路。

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

總結

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

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

轉載請告知做者並註明出處。
相關文章
相關標籤/搜索