django错误(外部IP)
每次我输入一个不存在的地址时,都会收到通知。
错误追踪(最近的调用在最前面): 文件 "/home/user/opt/local/django/core/handlers/base.py",第 100 行,在 get_response 中 文件 "/web/blog/views.py",第 33 行,在 post 中 文件 "/home/user/local/django/db/models/manager.py",第 132 行,在 get 中 文件 "/home/user/opt/local/django/db/models/query.py",第 347 行,在 get 中 不存在:与查询匹配的帖子不存在。
怎么解决这个问题呢?
4 个回答
这个错误是因为你的 get
查询没有找到任何记录。如果你想在这种情况下显示一个 404
页面,sdolan 已经给你提供了相关的建议。不过,如果你想在查询没有找到匹配记录时使用一些合理的默认值,你可以把对 get
的调用放在一个 try
和 catch
块里。比如:
try:
post = Post.object.get(pk=id)
except Post.DoesNotExist:
post = None
# Probably use some sensible defaults, or do something else
在查询中使用 get_object_or_404,想了解更多信息可以查看文档。
http://docs.djangoproject.com/en/1.3/topics/http/shortcuts/#get-object-or-404
修改你的查询,使用get_object_or_404
,或者在查找时捕获YourModel.DoesNotExist
(第三段)这个异常,并抛出一个Http404
异常。当你不捕获DoesNotExist
异常时,视图会抛出一个500错误。这样做的副作用是,它会向在settings.py
中定义的ADMINS
发送一封异常邮件。
以下是这两种情况的示例:
from django.shortcuts import get_object_or_404
post_id = 1
post = get_object_or_404(Post, id=post_id)
# or catch the exception and do something with it
from django.http import Http404
try:
post = Post.objects.get(id=post_id)
except Post.DoesNotExist:
# id doesnt exist... do extra things here
raise Http404