Django shortcuts

Happy_JG·2024년 6월 20일
0

Django

목록 보기
31/32

get_object_or_404

get_object_or_404는 Django에서 사용자가 요청한 객체를 데이터베이스에서 조회할 때 사용하는 편리한 함수이다. 주어진 모델 클래스와 조건에 맞는 객체가 존재하지 않을 경우 404 오류를 자동으로 발생시켜주어 try, except문과 같은 예외처리를 하는 번거로움이 줄어든다.

from django.shortcuts import render
from .models import Post

def post_detail(request, post_id):
    try:
        post = Post.objects.get(pk=post_id)
    except Post.DoesNotExist:
        raise Http404("Post does not exist")
    return render(request, 'blog/post_detail.html', {'post': post})

가령 이렇게 예외처리를 했다면,

from django.shortcuts import render, get_object_or_404
from .models import Post

def post_detail(request, post_id):
    post = get_object_or_404(Post, pk=post_id)
    return render(request, 'blog/post_detail.html', {'post': post})

get_object_or_404로 간단하게 처리가 가능하다.

get_list_or_404

데이터가 없을 때 404 페이지를 자동으로 보여줌으로써, 사용자가 요청한 페이지가 존재하지 않음을 명확하게 전달할 수 있다. 이를 통해 사용자 경험을 향상시킬 수 있을 지는 잘 모르겠다.

def post_list_by_category(request, category_name):
    posts = get_list_or_404(Post, category__name=category_name)
    return render(request, 'post_list.html', {'posts': posts})
<!DOCTYPE html>
<html>
<head>
    <title>Posts in {{ category_name }}</title>
</head>
<body>
    <h1>Posts in {{ category_name }}</h1>
    <ul>
        {% for post in posts %}
            <li>
                <h2>{{ post.title }}</h2>
                <p>{{ post.content|truncatewords:30 }}</p>
                <a href="{% url 'post_detail' post.pk %}">Read more</a>
            </li>
        {% empty %}
            <li>No posts found in this category.</li>
        {% endfor %}
    </ul>
</body>
</html>
profile
hello!

0개의 댓글