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

Django详情页无法渲染数据,报TypeError:无法解包非可迭代int对象

问题分析

  1. TypeError 触发原因:核心是detail视图未根据URL传入的pk获取对应单篇文章,且模板使用的变量名与视图传递的不匹配;另外需确认urls.py中路径参数写法是否为正确的尖括号(而非HTML转义字符</>)。
  2. 空白模板原因:详情页模板调用{{post.title}}等单个文章变量,但视图传递的是所有文章的查询集posts,模板找不到对应变量导致空白。

修复步骤

1. 修正 views.py 的 detail 函数

根据pk获取单篇文章,传递与模板匹配的变量名:

# 若未导入,需添加:from django.shortcuts import get_object_or_404
def detail(request, pk):
    # 获取对应pk的文章,用get_object_or_404可在pk不存在时返回404页面
    post = get_object_or_404(post, pk=pk)
    context = {'post': post}
    return render(request, 'detail_page.html', context)

建议模型类名改为Post(符合Python命名规范),修改后需同步将查询语句改为Post.objects.get(...),并执行数据库迁移。

2. 修正 urls.py 的路径写法

确保路径参数使用正确的尖括号,建议末尾加斜杠符合Django规范:

path('', views.Post, name='Post'),
path('detail/<int:pk>/', views.detail, name='detail'),

3. 额外优化(可选)

  • 模型类名规范修改:
class Post(models.Model):
    title = models.CharField(max_length=200, null=True)
    author = models.CharField(max_length=200, null=True)
    body = models.TextField(max_length=200, null=True)
    date_created = models.DateTimeField(auto_now_add=True, null=True)

修改后执行迁移命令:

python manage.py makemigrations
python manage.py migrate

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:33:16