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

Django跳转详情页时报'Photo' object is not iterable错误如何解决

错误原因

你在views.py的view视图中,使用Photo.objects.get(id=pk)查询返回的是单个Photo模型对象,但在详情页模板view.html中使用了{% for Photo in alldescription %}语法对这个单个对象做循环遍历,Django模板尝试遍历非可迭代的单个对象时就会抛出'Photo' object is not iterable报错。

解决方法

方案1:修改详情页模板view.html(推荐,符合单条详情页的业务逻辑)

直接删除循环语法,直接调用单个对象的属性即可,修改后的模板代码如下:

{% extends "logisticbase.html" %}
{% block content %}
<style>
</style>
   <div style="padding-left:16px">
     <br>
       <h4>Reception Unserviceable  </h4>
 <div class="form-block">
  </tr>
           <img src="/media/{{alldescription.image}}" width="250px">
           <!-- 其他字段也可以直接用alldescription.xxx调用,比如客户名称{{alldescription.customername}} -->
 </div>
   </div>
{% endblock %}

方案2:修改views.py的view视图(如果需要返回多个Photo对象的场景可选择)

如果你的业务逻辑需要返回多条Photo数据,把get改为filter查询即可,返回的是可迭代的查询集:

def view(request, pk):
    alldescription = Photo.objects.filter(id=pk) # filter返回查询集,可遍历
    return render(request, 'view.html', {'alldescription': alldescription})

额外优化建议

  • 你在urls.py中定义的view路由参数pk类型是str,但实际传入的是整数id,建议改为int避免无效参数请求:path('view/<int:pk>/', views.view, name='view')
  • 单条查询建议使用get_object_or_404替代原生get,当传入的id不存在时会直接返回404页面,而非抛出500服务错误:
    from django.shortcuts import get_object_or_404
    
    def view(request, pk):
        alldescription = get_object_or_404(Photo, id=pk)
        return render(request, 'view.html', {'alldescription': alldescription})
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:18:01