你好,我是goldsunC
让我们一起进步吧!
从0到1搭建个人博客-Django(九)
回顾系列博客请到专栏哦~
增加修改文章功能
修改文章功能和新建文章功能类似,只不过修改文章的模板里面已经有了相应文章的内容。
先来增加个视图函数来实现修改文章功能,打开article/views.py
,增加如下函数:
def article_update(request, id):
"""
这个视图函数用来修改文章
通过POST方法提交表单,更新的有title、body字段
GET方法进入初始表单页面
id为文章的id
"""
# 获取需要修改的具体文章对象
article = ArticlePost.objects.get(id=id)
# 判断用户是否为POST提交表单数据
if request.method == "POST":
# 将提交的数据赋值到表单实例
article_post_form = ArticlePostForm(data=request.POST)
#判断提交的数据是否满足模型的要求
if article_post_form.is_valid():
# 保存新写入的 title、body数据并保存
article.title = request.POST['title']
article.body = request.POST['body']
article.save()
#完成后返回到修改后的文章中,需要传入文章的id值
return redirect("article:article_detail", id=id)
# 如果数据不合法,返回错误信息
else:
return HttpResponse("表单内容有问题啊,重新写一下!")
else:
# 创建表单类实例
article_post_form = ArticlePostForm()
# 赋值上下文,将 article 文章对象也传递进去,以便提取旧的内容
context = {'article':article, 'article_post_form':article_post_form}
# 将响应返回到模板中
return render(request,'article/update.html',context)
注意函数中我们修改的文章对象用文章id
标识,用户用POST
方法提交表单时没有创建新的文章,而是在之前的文章中修改。redirect
函数定向到了文章详情的页面,因此如果把id
一同打包过去,就把之前相应的文章提取出来了。
修改文章模板
模板就跟创建文章的更像了,不过还是需要一个新的html
页面,在templates/article/
下新建update.html
文件,写入如下代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>更新文章</title>
</head>
{% extends "base.html" %} {% load staticfiles %}
{% block title %} 更新文章 {% endblock title %}
{% block content %}
<div class="container">
<div class="row">
<div class="col-12">
<br>
<form method="post" action=".">
{% csrf_token %}
<div class="form-group">
<label for="title">文章标题</label>
<!-- 在 value 属性中指定文本框的初始值为旧的内容,即 article 对象中的 title 字段 -->
<input type="text" class="form-control" id="title" name="title" value="{{ article.title }}">
</div>
<div class="form-group">
<label for="body">文章正文</label>
<!-- 文本域不需要 value 属性,直接在标签体中嵌入数据即可 -->
<textarea type="text" class="form-control" id="body" name="body" rows="12">{{ article.body }}</textarea>
</div>
<button type="submit" class="btn btn-primary">完成</button>
</form>
</div>
</div>
</div>
{% endblock content %}
<body>
</body>
</html>
这个模板和新建文章的模板相比,只是把文章的title
和body
嵌入到了模板里面。
URL路由
这些大家应该都熟练的很了,打开article/urls.py
加入:
path('article-update/<int:id>/',views.article_update,name='article_update'),
修改文章入口
入口的话就放在删除文章的后面吧,还记得删除文章的入口在哪吗?
打开tempaltes/article/detail.html
,加入如下代码:
<a href="{% url 'article:article_update' article.id %}">编辑文章</a>
知道加在哪儿吗?
OK,现在启动服务器,看看效果:
注意已经多了编辑文章
的链接,点击之后如下:
你已经可以在里面更改你的文章了,改完之后点击完成,文章就保存了。