从0到1搭建个人博客-Django(九)

本文档介绍了如何在Django框架下为个人博客添加文章修改功能。首先,通过视图函数`article_update`实现了获取文章、处理POST请求及更新文章内容的逻辑。然后,创建了`update.html`模板,展示带有预填充内容的修改文章表单。最后,更新了URL路由和文章详情页的编辑链接,使得用户可以顺利地编辑并保存已有的文章。
摘要由CSDN通过智能技术生成

你好,我是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>

这个模板和新建文章的模板相比,只是把文章的titlebody嵌入到了模板里面。

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,现在启动服务器,看看效果:

在这里插入图片描述

注意已经多了编辑文章的链接,点击之后如下:

在这里插入图片描述

你已经可以在里面更改你的文章了,改完之后点击完成,文章就保存了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳寜

“请作者吃颗糖!”

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值