django错误(外部IP)

3 投票
4 回答
2054 浏览
提问于 2025-04-16 18:04

每次我输入一个不存在的地址时,都会收到通知。

错误追踪(最近的调用在最前面): 文件 "/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 个回答

1

这个错误是因为你的 get 查询没有找到任何记录。如果你想在这种情况下显示一个 404 页面,sdolan 已经给你提供了相关的建议。不过,如果你想在查询没有找到匹配记录时使用一些合理的默认值,你可以把对 get 的调用放在一个 trycatch 块里。比如:

try:
    post = Post.object.get(pk=id)
except Post.DoesNotExist:
    post = None
    # Probably use some sensible defaults, or do something else
1

在查询中使用 get_object_or_404,想了解更多信息可以查看文档。

http://docs.djangoproject.com/en/1.3/topics/http/shortcuts/#get-object-or-404

6

修改你的查询,使用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

撰写回答