Ответ 404 при отсутствии записи в Django
Частый случай: из URL берут
id, тянут пост из базы.
Если записи нет - нужно отдать
404, а не падать с ошибкой.
Удобнее всего
get_object_or_404: при
отсутствии объекта Django сам
вернет ответ 404:
from django.shortcuts import get_object_or_404, render
from main.models import Post
def post_detail(request, id):
post = get_object_or_404(Post, id=id)
return render(request, 'post.html', {
'post': post,
})
То же вручную - через
Http404:
from django.http import Http404
from main.models import Post
def post_detail(request, id):
try:
post = Post.objects.get(id=id)
except Post.DoesNotExist:
raise Http404('Post not found')
return render(request, 'post.html', {
'post': post,
})
Можно и просто вернуть
HttpResponse со статусом
404, но Http404 /
get_object_or_404 подключают
стандартную страницу «не найдено».
У модели Employee должно
быть поле slug. Напишите
представление: по slug
из URL получите работника.
Если есть - отдайте страницу
с данными, если нет - 404
через get_object_or_404.
Сделайте то же через
try/except и
Http404.
Подключите маршрут вида
/employee/<slug:slug>/.