我想在网页上列出一个对象(俱乐部)详细信息,方法是从网址中提取其id并将其提供给django models api。当数据库中存在该ID时,它正在工作。但是当我尝试在url中提供不存在的id时,模型api会给出这个错误:
club = Club.objects.get(id = 8) Traceback(最近一次调用最后一次): 文件“”,第1行,in 文件“/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py”,第131行,获取 return self.get_query_set()。get(* args,** kwargs) 文件“/usr/local/lib/python2.7/dist-packages/django/db/models/query.py”,第366行,在get中 %self.model._meta.object_name) DoesNotExist:俱乐部匹配查询不存在。
所以我在视图中为此错误添加了一个异常处理程序。这是代码:
def club_detail(request, offset):
try:
club_id = int(offset)
club = Club.objects.get(id=club_id)
except (ValueError, DoesNotExist):
raise HTTP404()
return render_to_response('home/club_detail.html', {'club': club }, context_instance = RequestContext(request))
但它没有捕获DoesNotExist错误,而是在浏览器中提供NameError:
NameError at /club/8/
global name 'DoesNotExist' is not defined
Request Method: GET
Request URL: http://127.0.0.1:8000/club/8/
Django Version: 1.4.1
Exception Type: NameError
Exception Value:
global name 'DoesNotExist' is not defined
我怎样才能让它发挥作用?提前致谢
答案 0 :(得分:8)
DoesNotExist
是作为模型本身的属性实现的。将您的行更改为:
except (ValueError, Club.DoesNotExist):
或者,由于所有DoesNotExist
错误都会继承ObjectDoesNotExist
类,您可以这样做:
from django.core.exceptions import ObjectDoesNotExist
...
except (ValueError, ObjectDoesNotExist):
如here所述。
答案 1 :(得分:1)
你不能直接使用DoesNotExist - 它应该是Club.DoesNotExist所以你的代码看起来像:
def club_detail(request, offset):
try:
club_id = int(offset)
club = Club.objects.get(id=club_id)
except (ValueError, Club.DoesNotExist):
raise HTTP404()
return render_to_response('home/club_detail.html', {'club': club }, context_instance = RequestContext(request))
答案 2 :(得分:0)
您需要导入DoesNotExist
:
from django.core.exceptions import DoesNotExist