In a view, people often retrieve the object with the
.get(…) [Django-doc] call, for example:
def post_details(request, pk): mypost = Post.objects.get(pk=pk) # …
Why is it a problem?
If no such
Post object exists, then the call will raise a
Post.DoesNotExist exception. If this exception is not handled properly, it means that the server will return a HTTP 500 response, which means that the error should be at the server side, but here the problem is at the client side, since there simply exists no
Post for the given primary key.
What can be done to resolve the problem?
We can make use of
get_object_or_404(…) [Django-doc]. This function will raise a
Http404 exception in case the model object does not exists. This will then be handled by Django and eventually a HTTP 404 response will be returned:
from django.shortcuts import get_object_or_404 def post_details(request, pk): mypost = get_object_or_404(Post, pk=pk) # …