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

Django访问文章详情报错:postdetail() got an unexpected keyword argument 'post'

报错postdetail() got an unexpected keyword argument 'post'解决方案

错误原因

该报错是两个问题共同导致的:

  • URL路由中捕获的参数名和视图函数定义的接收参数名不匹配
  • 视图函数中查询单篇文章的方法和参数使用错误

具体修改步骤

1. 修正views.py代码

首先调整视图函数的参数名,同时替换正确的单对象查询方法:

# 首先修改导入,把get_list_or_404换成get_object_or_404(查询单篇文章不需要返回列表)
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from django.urls.base import reverse
from django.urls.converters import SlugConverter
from .models import post

def index(request):
    tpost = post.objects.all()
    return HttpResponse("Welcome to the django website")

def postlist(request):
    tpost = post.objects.filter(status = "published")
    return render(request, "blog/post/list.html", {"posts": tpost})

# 把参数npost改成post,和URL中定义的参数名对应
def postdetail(request, post, pk):
    # 第一个参数传模型类post,筛选条件slug对应传入的post参数,id对应pk参数
    fpost = get_object_or_404(post, slug = post, id = pk)
    return render(request, "blog/post/detail.html", {"fpost": fpost})

补充:如果你不想修改视图函数的参数名,也可以选择修改urls.py中的参数名,把<slug:post>改成<slug:npost>即可,两种方案二选一即可。

2. (可选)优化命名规范

Python的类名默认遵循大驼峰命名规则,建议把你的模型类名从post改成Post,避免和变量名冲突,修改后需要同步调整视图中所有调用模型的地方。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:24:03