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에서는
“데이터가 있을 수도, 없을 수도 있다”를
템플릿에서 자연스럽게 처리하는 것이 기본이다.
'Django 프론트& 백엔드 개발' 카테고리의 다른 글
| Django 더미 데이터 생성 – django-seed 사용 및 주의점 (0) | 2026.01.14 |
|---|---|
| Django에서 서버 에러 대신 404로 응답하기: get_object_or_404 사용 이유 (0) | 2026.01.13 |
| Django 게시글 삭제(Delete) 기능 구현 (0) | 2026.01.11 |
| Django 수정(View)에서 request.POST와 instance를 함께 사용하는 이유 (0) | 2026.01.11 |
| Django ModelForm으로 Form 위젯 커스터마이징하기 (0) | 2026.01.11 |