请教使用 Django 时,提示 local variable 'xxx' referenced before assignment 的问题

2017-05-26 15:21:25 +08:00
 garygay
数据库只有 4 条数据,localhost/mysite/detail/4,访问的是第四条信息,当输入 detail/5 的时候报错,但是设计中应该是提示没有该商品。我在 stackoverflow 上看到有类似的问题,和 POST 有关?
https://stackoverflow.com/questions/3881601/require-help-in-django-local-variable-form-referenced-before-assignment

下面是代码,如果有描述不清楚的,我会随时改,谢谢大家。

[ views.py ]

def detail(request, id):
try:
product = models.Product.objects.get(id=id)
images = models.PPhoto.objects.filter(product=product)
except:
pass
#为什么下面的会报错
return render(request, 'mysite/detail.html', {'product':product, 'images':images})
#改成下面这个就没问题
template = get_template('mysite/detail.html')
html = template.render(locals())
return HttpResponse(html)

[ detail.html ]

{% if product %}
<table>
<tr><td align="center"><h3>{{ product.nickname }}</h3></td></tr>
<tr><td align="center">{{ product.description }}</td></tr>
<tr><td align="center">{{ product.year }}年出产</td></tr>
<tr><td align="center">{{ product.price }}元</td></tr>
{% else %}
<h2>找不到该手机</h2>
{% endif %}

[ index.html ]

<td><a href="{% url 'detail-url' p.id %}">{{ p.nickname }}</a></td>

[ url.py ]

url(r'^detail/(\d+)$', views.detail, name='detail-url')
3905 次点击
所在节点    Python
3 条回复
jimmyye
2017-05-26 16:02:59 +08:00
因为异常导致赋值没有进行,在 except 里给它们赋值 None 就行了
111111111111
2017-05-26 19:28:14 +08:00
product = 这一行异常,导致下一行没有执行
在 try 前或者 except 给 images 设置初始值即可
另外 filter 查不到数据不会异常 可以放到 except 外面,这样也可以解决 lz 的问题
garygay
2017-05-27 10:48:35 +08:00
@jimmyye
@111111111111 谢谢你们

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/364015

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX