프로그래밍

[Django] 장고 Template 활용 예제(+에러페이지) 본문

Python/Django

[Django] 장고 Template 활용 예제(+에러페이지)

시케 2023. 11. 28. 10:33
728x90
반응형

2023.11.28.화

장고 Template 활용

장고 Template의 기본적인 내용을 알아보았으니 본격적으로 활용해보자

 

2023.11.28 - [Python/Django] - [Django] 장고 Template

 

[Django] 장고 Template

2023.11.28.화 장고 Template Django는 자체 템플릿 언어를 사용한다 이 언어는 독자적인 구문과 규칙을 가진 언어로, HTML과 같은 텍스트 기반 형식을 출력한다 템플릿은 기본적으로 텍스트 파일이며 텍

dev-9rm.tistory.com

 

views.py

질문 목록이 출력되도록 하는 함수이다

질문 목록 데이터는 Question.objects.order_by('-create_date') 로 얻을 수 있다

from django.shortcuts import render
from .models import Question


def index(request):
    question_list = Question.objects.order_by('-create_date') # 질문 목록 데이터
    context = {'question_list': question_list}
    
    # 파이썬 데이터를 템플릿에 적용하여 HTML로 반환
    return render(request, 'pybo/question_list.html', context)

템플릿 파일

views.py의 render 함수에서 사용한 템플릿의 파일명 그대로 템플릿 파일을 만들어준다

<!-- question_list.html -->
{% if question_list %}
    <ul>
    {% for question in question_list %}
    	<!-- 클릭시 요청될 URL -->
        <li><a href="/pybo/{{ question.id }}/">{{ question.subject }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>질문이 없습니다.</p>
{% endif %}

 

urls.py

질문 목록 화면에서 링크를 클릭하여 질문 상세 요청이 된다

해당 요청에 따른 URL은 맵핑이 되어있지 않으므로 urls.py에 추가해주어야 한다

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index),
    path('<int:question_id>/', views.detail),
]

views.py

이제 해당 요청에 따라 실행될 view 로직

즉, 질문 상세에 대한 views.detail 함수가 필요하다

(... 생략 ...)

def detail(request, question_id):
    question = Question.objects.get(id=question_id)
    context = {'question': question}
    return render(request, 'pybo/question_detail.html', context)

question_detail.html

질문 상세에 대한 Template 작성을 해야한다

<!--question_detail.html -->
<h1>{{ question.subject }}</h1>
<div>
    {{ question.content }}
</div>

에러페이지

장고에서 보다 손쉽게 에러페이지 처리가 가능하다

# views.py
from django.shortcuts import render, get_object_or_404
from .models import Question

(... 생략 ...)

def detail(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    context = {'question': question}
    return render(request, 'pybo/question_detail.html', context)
728x90
반응형

'Python > Django' 카테고리의 다른 글

[Django] 장고 Template  (0) 2023.11.28
[Django] 장고 View  (1) 2023.11.27
[Django] 장고 관리자(Admin)  (0) 2023.11.27
[Django] 장고 Model 사용(생성, 조회, 수정, 삭제, 작성)  (1) 2023.11.27
[Django] 장고 Model  (1) 2023.11.24
Comments