上一章咱們感覺了視圖的工做流程。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
在前面的視圖中咱們定義了模板的位置在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)整個環路。
不要激動,精彩的還在後面。
本章咱們重寫了視圖,編寫了簡單的模板,和前面的模型成功關聯起來。
下一章將學習編寫一個漂亮的網頁模板。
轉載請告知做者並註明出處。