2

我想通过从 url 中提取其 id 并将其提供给 django models api 在页面上列出一个对象(俱乐部)的详细信息。当该 id 存在于数据库中时,它正在工作。但是,当我尝试在不存在的 url 中提供 id 时,模型 api 会出现此错误:

club = Club.objects.get(id=8) Traceback(最近一次调用最后):文件“”,第 1 行,在文件“/usr/local/lib/python2.7/dist-packages/django/db/models /manager.py”,第 131 行,在 get 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

我怎样才能让它工作?提前致谢

4

3 回答 3

8

DoesNotExist被实现为模型本身的属性。将您的行更改为:

    except (ValueError, Club.DoesNotExist):

或者,由于所有DoesNotExist错误都继承ObjectDoesNotExist该类,您可以执行以下操作:

from django.core.exceptions import ObjectDoesNotExist

...

    except (ValueError, ObjectDoesNotExist):

如此处所述。

于 2012-09-08T03:42:55.403 回答
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))
于 2012-09-10T10:11:49.130 回答
0

您需要导入DoesNotExist

from django.core.exceptions import DoesNotExist
于 2012-09-08T02:37:53.937 回答