Django搭建个人博客:改写View视图
改写视图函数
上一章我们感受了视图的工作流程。
为了让视图真正发挥作用,改写article/views.py
中的article_list
视图函数:
article/views.pyfrom django.shortcuts import render# 导入数据模型ArticlePost
from .models import ArticlePostdef article_list(request):# 取出所有博客文章articles = ArticlePost.objects.all()# 需要传递给模板(templates)的对象context = { 'articles': articles }# render函数:载入模板,并返回context对象return render(request, 'article/list.html', context)
代码同样很直白,分析如下:
.models
表示从当前文件夹的models.py
文件中导入ArticlePost
数据类ArticlePost.objects.all()
从ArticlePost
数据类获得所有的对象(即博客文章),并传递给articles
变量context
定义了需要传递给模板的对象,即articles
最后返回了
render
函数:- 第一个变量是固定的
request
对象,照着写就可以 - 第二个变量定义了模板文件的位置、名称,即
article/list.html
- 第三个变量定义了需要传入模板文件的对象,即
context
- 第一个变量是固定的
视图函数这样就写好了。
编写模板(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.pyTEMPLATES = [{...# 定义模板位置'DIRS': [os.path.join(BASE_DIR, 'templates')],...},
]
这就是说模板文件在项目根目录的templates
文件夹中,去找找吧。
很好,保存文件,重新启动服务器,刷新浏览器,如下:
成功!
虽然简陋,但是已经完全走通了MTV(model、template、view)整个环路。
不要激动,精彩的还在后面。
总结
本章我们重写了视图,编写了简单的模板,和前面的模型成功关联起来。
下一章将学习编写一个漂亮的网页模板。
- 有疑问请在杜赛的个人网站留言,我会尽快回复。
- 或Email私信我:dusaiphoto@foxmail.com
- 项目完整代码:Django_blog_tutorial
转载请告知作者并注明出处。
Django搭建个人博客:改写View视图相关推荐
- Django搭建个人博客:用django-notifications实现消息通知
凭借你勤奋的写作,拜读你文章的用户越来越多,他们的评论也分散在众多的文章之中.作为博主,读者的留言肯定是要都看的:而读者给你留言,自然也希望得到回复. 怎么将未读的留言呈现给正确的用户呢?总不能用户自 ...
- Django搭建简易博客
Django简易博客,主要实现了以下功能 连接数据库 创建超级用户与后台管理 利用django-admin-bootstrap美化界面 template,view与动态URL 多说评论功能 Markd ...
- 10分钟利用django搭建一个博客
以前老是听说ROR开发有多快多块,网上还有朋友为了证明这,专门制作了10分钟利用rails框架搭建一个简易博客的教程,最近学习django框架,觉得django给开发者的便捷也很多,心血来潮来写个10 ...
- 用django搭建个人博客(一)
用django2.0搭建个人博客 博客网站的需求与规划 该个人博客为简单的入门示范网站,具有以下功能 项目名称为mblog 通过admin管理界面发帖.编辑以及删除贴文,且此界面支持markdown语 ...
- django项目转pyc_Python自动化运维系列:Django搭建小博客
如何使用Django和Python怎么搭建一个小博客呢? 这是一个简单而困难的问题.简单的原因是,只要做过一次,基本上就能做到举一反三: 困难的原因是有没有用心和耐心去完成这个实验. 如果你成功了,那 ...
- Django搭建个人博客:给文章加个漂亮的标题图
现在虽然博客的功能大都实现了,但是界面还是比较朴素,特别是首页的文章列表几乎全是文字,看多了难免疲劳.因此,给每个文章标题配一张标题图,不仅美观,用户也能通过图片快速了解文章内容.实际上大部分社交网站 ...
- django搭建个人博客(一)
准备阶段 首先熟悉项目的根本流程,下面是对项目的每个模块流程阶段具体分析 模块 功能 注册 图形验证.短信验证 登陆 状态保存.cookie.session 个人中心 图片上传.更新数据 发布博客 数 ...
- Django搭建个人博客Blog-Day05
创建文章模块 创建文章app 在虚拟环境中,apps路径下使用如下代码: # 进入虚拟环境 workon wsl # 进入要创建app的路径下 cd blog/blog/apps # 创建app py ...
- Django搭建个人博客:用户的登录和登出
用户管理 用户数据可以说是大部分网站最重要的资产.用户管理就是对用户数据进行增删改查等操作的功能,自然也就非常的重要了. 本章开始学习用户管理的内容,首先从用户登录开始. 在Django中用app来区 ...
- Django搭建个人博客:上传头像图片
到目前为止我们的博客处理的都是文字.现代互联网早就进入了"读图"时代,图片的维护.展示也就相当重要. 上一章中预留了avatar字段,用来保存用户上传的头像,现在我们来实现这个功能 ...
最新文章
- TFS 2008 中文版下载及安装完整图解
- 关于sql中去换行符的问题
- Windows 2000 Active Directory FSMO 角色
- linux操作系统分区图解,图解磁盘分区介绍(超经典)
- java 热布署 开源_一种简单快捷的 java 热部署方式
- 关于TP中的M()方法与D()方法
- mysql sql优化及注意事项
- CitrixVDI新版动手实验手册
- Exchange2003 备份与还原
- php实战视频教程 帝国cms二次开发,PHP实战视频教程,帝国CMS二次开发之完成首页模板的制作.ppt...
- javaweb网上人才招聘系统的设计与实现
- 关闭”xx程序已停止工作”提示窗口
- Intel8251可编程串行扩展RS232串口
- 人脸识别SVM算法实现--参考麦子学院彭亮机器学习基础5.2
- linux下安装php并配置运行环境
- 理解Nurbs曲线/曲面的参数空间
- 免费开源动画制作软件推荐(新手必备)
- Eclipse15:Filter
- bad SQL grammer []; nested exception is java.sql.SQLSyntaxErrorException:ORA-00918:未明确定义列
- OpenHarmony NXP S32K148移植日记
热门文章
- 4.MySQL优化---多表查询优化
- [BZOJ1999][codevs1167][Noip2007]Core树网的核
- dbca:Exception in thread main java.lang.UnsatisfiedLinkError: get
- windows 与linux实现文件共享
- EasyRecovery如何恢复系统镜像
- unittest 测试
- 【Notification】屏蔽特定应用的通知提示
- curl上传图片的大坑
- 配置一个强大的FireFox
- SpringMVC源码总结(八)类型转换PropertyEditor的背后