You need to enable JavaScript to run this app. Django点击Genre分类跳转出现'Genre' object is not iterable错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Django点击Genre分类跳转出现'Genre' object is not iterable错误如何解决

错误原因&修复步骤

1. 核心报错原因:单个对象不可迭代

你在genreView中通过get_object_or_404(Genre, id=pk)查询到的是单个Genre分类对象,不是可迭代的查询集,但你的genre.html模板里必然写了{% for xxx in genres %}的循环代码,对单个对象执行遍历就会抛出'Genre' object is not iterable错误。

修复逻辑:

分类列表页需要返回该分类下的所有电影数据,假设你的电影模型名为Movie,且通过外键关联了Genre,修改视图代码:

def genreView(request, pk):
    # 先拿到当前点击的分类对象
    genre = get_object_or_404(Genre, id=pk)
    # 拿到该分类下的所有电影(外键关联字段请替换成你自己的实际字段名)
    movies = Movie.objects.filter(genre=genre)
    context = {
        'current_genre': genre,
        'movies': movies
    }
    return render(request, 'genre.html', context)

后续genre.html模板里遍历movies变量渲染电影列表即可,不要遍历单个分类对象。


2. urls.py 多处错误修复

原代码有3处错误:

  • 变量名拼写错误:urlapatterns 改为 urlpatterns
  • path参数语法错误:path('genre/<int:pk>, 缺少闭合引号,改为 path('genre/<int:pk>',
  • 路由name重复且不匹配:两个路由都用了name='home',第二个路由的name要和模板里反向解析的名称一致,改为name='genre'

修复后的urls.py代码:

urlpatterns = [
    path('', views.home, name='home'),
    path('genre/<int:pk>', views.genreView, name='genre')
]

3. 其他潜在错误修复

models.py里的__str__方法缩进错误,应该放在Genre类内部:

class Genre(models.Model):
    title = models.CharField(max_length=500)

    def __str__(self):
        return self.title

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 14:24:10