Django使用UpdateView编辑文章时出现NoReverseMatch错误如何解决
Django UpdateView实现文章编辑时NoReverseMatch错误解决方案
错误根源
报错明确指向post_detail路由解析失败,原因是你在update_post.html模板中调用{% url 'articles:post_detail' %}时没有传入该路由必填的slug参数:
你定义的post_detail路由规则path('post/<slug:slug>', ...)要求必须传递slug参数,但是返回按钮的url调用未传参。
修复方法
修改update_post.html中的返回按钮链接即可,UpdateView会自动将当前编辑的文章对象注入模板上下文,变量名为object或小写模型名post,有两种写法可选:
写法1:直接传递slug参数
将原返回链接代码:
<a class="btn btn-outline-primary" href="{% url 'articles:post_detail' %}" role="button">Назад</a>
修改为:
<a class="btn btn-outline-primary" href="{% url 'articles:post_detail' post.slug %}" role="button">Назад</a>
写法2:调用模型内置方法(更推荐)
你已经在Post模型中定义了get_absolute_url方法,直接调用即可,不用手动拼接参数:
<a class="btn btn-outline-primary" href="{{ post.get_absolute_url }}" role="button">Назад</a>
可选优化点
你Post模型中定义的post_update_date字段当前使用了auto_now_add=True参数,该参数只会在文章第一次创建时写入时间,后续编辑更新不会自动修改时间,如果需要实现每次更新文章自动同步更新时间,可将该字段参数改为auto_now=True:
post_update_date = models.DateTimeField(auto_now=True, verbose_name='Дата обновления публикации')
内容的提问来源于stack exchange,提问作者ilsurealism
相关产品推荐
相关产品推荐

