Django图片加载触发无限循环及404 NotFound问题求助
解决Django模板中图片加载失败导致的无限循环问题
问题分析
你遇到的无限循环问题,根源在于图片加载失败时的onerror事件被反复触发。从日志可以看到,浏览器一直在请求lawyer_0.png和lawyer_1.png但都返回404,这说明两个核心问题:
- 模板里
onerror指定的默认图片路径/文件名和实际文件不匹配(模板里写的是test_{{ test.gender }}.png,但日志里实际请求的是lawyer_xx.png) - 当默认图加载失败时,浏览器会再次触发
onerror事件,形成无限请求循环。
解决方案
我们需要两步来彻底修复这个问题:
修正默认图片的路径/文件名
把onerror里的图片路径改成和日志中请求一致的正确路径(比如应该是lawyer_{{ test.gender }}.png而不是test_...),同时确保这些默认图片确实存在于你的静态文件目录中(比如/static/images/template/下要有lawyer_0.png和lawyer_1.png)。添加
onerror防护,避免无限循环
在onerror事件里先设置this.onerror=null;,这样当默认图也加载失败时,不会再次触发onerror事件,直接终止循环。
修改后的Django模板代码
{% for test in test_profile %} <tr> <td> {% if test.path != '' %} <img style='width:70px;' src="{% static '/uploads' %}{{ test.path }}/pic_{{ test.name }}" onerror="this.onerror=null; this.src='/images/template/lawyer_{{ test.gender }}.png';"> {% endif %} </td> <td>{{ test.l_idx }}</td> <td>{{ test.l_name }}</td> <td style="padding-left:10px;">{{ test.sub_name }}</td> </tr> {% endfor %}
额外优化建议
- 推荐使用Django的
static模板标签来加载默认图片,路径更规范且不易出错,比如:src="{% static 'images/template/lawyer_'|add:test.gender|add:'.png' %}" - 部署前务必检查默认图片是否存在,运行
python manage.py collectstatic确保静态文件正确收集到生产环境目录。
内容的提问来源于stack exchange,提问作者tigerJK
相关产品推荐
相关产品推荐

