You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django博客UpdatePostView报错需URLconf配置pk/slug问题求助

报错根因

UpdateView是Django提供的对象级编辑通用视图,运行时必须从URL中获取待操作对象的唯一标识(主键pk或slug字段)才能定位到具体的Post记录,你当前配置的编辑路由没有携带任何对象标识参数,因此触发参数缺失报错。

修复步骤
  • 调整路由配置
    打开urls.py,给更新视图的路径加上slug参数捕获规则,和已有的详情页、点赞路由逻辑对齐,将原编辑路由:
path('edit_post/', UpdatePostView.as_view(), name='update_post'),

替换为:

path('edit_post/<slug:slug>/', UpdatePostView.as_view(), name='update_post'),
  • 修正页面跳转入口
    所有指向编辑页的链接都需要传入目标文章的slug参数,比如在文章详情页、列表页放置编辑按钮时,模板标签写法如下:
<a href="{% url 'update_post' slug=post.slug %}" class="btn btn-signup">编辑文章</a>
  • (可选补充)增加访问权限控制
    当前视图未做权限校验,任意访问者都可以修改所有文章,建议在视图类中混入权限校验类,仅允许文章作者或管理员访问编辑页,修改views.py中的视图代码:
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.views.generic import UpdateView
from .models import Post

class UpdatePostView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model = Post
    template_name = 'update_post.html'
    fields = ('title', 'excerpt', 'slug', 'featured_image',
              'content', 'author', 'status')

    def test_func(self):
        target_post = self.get_object()
        return self.request.user == target_post.author or self.request.user.is_superuser

你现有的update_post.html模板不需要调整结构,表单配置的action="."会自动将数据提交到当前带slug参数的编辑路由,参数配置正确后即可正常运行。

内容的提问来源于stack exchange,提问作者Jord

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 01:06:29