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)整个环路。

不要激动,精彩的还在后面。

总结

本章咱们重写了视图,编写了简单的模板,和前面的模型成功关联起来。

下一章将学习编写一个漂亮的网页模板。

转载请告知做者并注明出处。
相关文章
相关标签/搜索