一、改写视图函数

之前初步探索了视图的工作流程。为了让视图发挥真正作用,现对​​article/views.py​​​中的​​article_list​​视图函数进行改写:

Django搭建个人博客--改写View视图_django

  • ​from .models import ArticlePost​​​:从​​models.py​​​中导入​​ArticlePost​​数据类;
  • ​articles = ArticlePost.objects.all()​​​:数据类的方法,可以获得所有的对象,并传递给​​articles​​变量;
  • ​context​​​:定义了需要传递给模板的上下文,这里即​​articles​​;
  • 最后返回了​​render​​​函数。它的作用是结合模板和上下文,并返回渲染后的​​HttpResponse​​对象。通俗的讲就是把context的内容,加载进模板,并通过浏览器呈现出来。

​render​​的变量分解如下:

  • request是固定的​​request​​对象,照着写即可;
  • ​article/list.html​​定义了模板文件的位置、名称;
  • ​context​​定义了需要传入模板文件的上下文;

二、编写模板(templates)

上面改写视图函数时,我们定义了模板的位置在​​article/list/html​​​,因此需要在根目录下新建​​templates​​​文件夹,再新建​​article​​​文件夹,再新建​​list.html​​文件,即:

Django搭建个人博客--改写View视图_django_02


并在​​list.html​​中写入:

{% for article in articles %}
<h1>{{ article.title }}</h1>
<p>{{ article.body }}</p>
{% endfor %}

Django通过模板来动态生成HTML,其中就包含描述动态内容的一些特殊语法:

  • ​{{ % for article in articles % }}​​​:​​articles​​​为视图函数的​​context​​​传递过来的上下文,即所有文章的集合。​​{% for %}​​​循环表示依次取出​​articles​​​中的元素,命名为​​article​​​,并分别指向接下来的操作。末尾用​​{% endfor %}​​告诉Django循环结束的位置;
  • 使用​​.​​​符号来访问变量的属性。这里的​​article​​​为模型中的某一条文章;我们在模型的​​ArticlePost​​​中定义了文章的标题叫​​title​​​,正文叫​​body​​​,因此这里可以用​​article.title​​​来访问文章的标题,用​​article.body​​来访问文章的正文;
  • ​<h1> . . . </h1>和<p> . . . </p>​​是html标签;

三、设置模板位置

上面我们在根目录新建了templates/article/list.html,所以需要告诉Django模板的位置在哪,否则就找不到。

打开​​setting.py​​,它保存了Django项目的各种初始配置:

Django搭建个人博客--改写View视图_数据_03


四、查看效果

启动服务器,在虚拟环境下,输入:

python manage.py runserver

Django搭建个人博客--改写View视图_数据_04


打开浏览器,输入地址:​​http://127.0.0.1:8000/article/article-list/​​:

Django搭建个人博客--改写View视图_html_05