Django 프론트& 백엔드 개발

Django ORM 조회 결과가 없을 때 템플릿에서 처리하는 방법 (if / for 예제)

Data Jun 2026. 1. 13. 22:38

Django에서 ORM을 사용해 데이터를 조회할 때 보통 이렇게 작성합니다.

def post_list(request):
    posts = Post.objects.all()
    context = {'posts': posts}
    return render(request, 'posts/post_list.html', context)

하지만 실제 서비스에서는 데이터가 하나도 없는 경우도 반드시 고려해야 합니다.

  • 글이 아직 하나도 없을 때
  • 검색 결과가 없을 때
  • 조건에 맞는 데이터가 없을 때

이럴 때 템플릿 단에서 분기 처리를 해주면 UX가 훨씬 좋아집니다.

 

1. 템플릿 언어로 “있을 때 / 없을 때” 분기하기

Django 템플릿에서는 if 문을 사용해
ORM으로 전달된 QuerySet의 존재 여부를 판단할 수 있습니다.

{% if posts %}
    <!-- 데이터가 있을 때 -->
{% else %}
    <!-- 데이터가 없을 때 -->
{% endif %}

posts가 비어 있으면(QuerySet이 empty) 자동으로 False로 평가됩니다.

 

2. 목록 출력 예시

{% block content %}
    <div class='btn_post'>
        <a href='{% url 'post-create' %}'>글쓰기</a> 
    </div>
    {% if posts %}
        <div class="post_container">
            {% for post in posts %}
                <div class="post"><a href="{% url 'post-detail' post.id %}">         
                    <h2 class="title">{{post.tile}}</h2>
                    <p class="date">{{post.dt_created}}</p>
                    <p class="text">{{post.content|slice:":100"}}</p>
                </a></div>
            {% endfor %}
        </div>
    {% else %}
        <div class='blank'>
            <p> 보여줄 글이 없어요.<br>첫 글을 작성해보면 어떨까요?</p>
        </div>
    {% endif %}

{% endblock content %}

 

 

데이터가 비어있을 경우 템플릿 예시

 

 

3. 정리하면

Django에서는
“데이터가 있을 수도, 없을 수도 있다”를
템플릿에서 자연스럽게 처리하는 것이 기본이다.