Django의 Simple Template Response와 Template Response에 대해서

개발을 파헤치다/Django|2018. 7. 24. 16:53

Django는 강력한 웹 프레임워크입니다.

쉽게 사용할 수 있는 Python언어로 구현되어 있으며 10만개가 넘는 다양한 패키지들을 제공하기 때문에 뛰어난 생산성을 자랑합니다.

Django에서는 웹 프론트엔드 구현을 더 빠르고 쉽게하기 위해서 다양한 템플릿들을 제공합니다.

Django에서 기본적으로 제공하는 HttpResponse는 정적인 파일들(웹 페이지에 동적으로 데이터가 들어가지 않는 파일들)을 렌더링해서 응답으로 보내줍니다.

HttpResponse는 객체가 생성됨과 동시에 이미 렌더링된 컨텐츠(HTML 파일) 받습니다.

해당 컨텐츠를 수정할 수 있지만 쉽게 수정할 수 있는 구조는 아닙니다. 이것은 마치 가게에서 이미 포장까지 완료된 상품을 바꿔달라고 하는 것과 같습니다.


만약 상품 포장을 하기 전에 색깔을 바꾸거나 모델을 바꿀 수 있다면 비효율적인 처리과정을 생략할 수 있습니다.

만약 Response 객체가 생성된 후에 컨텐츠를 수정할 수 있다면 훨씬 생산적일 수 있지 않을까요?


예를 들어, 사용자에게 보여줄 템플릿을 변경하거나 템플릿에 들어가는 데이터의 내용을 바꾸는 것처럼 말이죠.

Template Response와 Simple Template Response는 위의 방법을 실현할 수 있는 기능을 제공합니다. 

기본 HttpResponse 객체와 달리 TemplateResponse 객체는 응답을 보내기 위해 View에서 제공한 템플릿과 컨텍스트(템플릿에 적용될 데이터의 묶음) 정보를 보관하게 됩니다. 


응답은 모든 것이 결정되고 사용자에게 보내질때까지 계산되지 않습니다. 그렇기때문에 중간에 여러가지로 수정이 가능하게 됩니다.


Simple Template Response과 Template Response의 렌더링 프로세스

TemplateResponse objects¶
class TemplateResponse[source]¶
TemplateResponse is a subclass of SimpleTemplateResponse that knows about the current HttpRequest.

공식문서에서 확인할 수 있듯, Template Response는 Simple Template Response를 상속하고 있습니다.

차이는 Template Response가 현재 Http 요청에 대한 정보를 가지고 있다는 점 뿐입니다.

Template Response를 사용하게 되면 Http 요청에 특정 템플릿과 데이터(Context를 의미합니다)를 함께 렌더링하여 응답을 할 수 있게 됩니다.

사용자의 Http 요청에 Template Response로 응답하기 전에 다음과 같은 절차를 거치게 됩니다.

Template Response로 특정 템플릿과 데이터가 함께 그려진 HTML 페이지를 사용자에게 보내주기 위해서는 해당 페이지를 그리는 과정이 필요합니다. 이를 렌더링(Rendering)이라고 부릅니다.


Template Response 간단한 예제




from django.template.response import TemplateResponse

def blog_index(request):
    return TemplateResponse(request, 'entry_list.html', {'entries': Entry.objects.all()})

댓글()