Django 템플릿과 렌더링

MoonLight·2021년 8월 2일
0

django

목록 보기
5/20
post-thumbnail

Django 템플릿과 렌더링


I. template 알아보기

  • 우리는 지금껏 아래그림처럼 views.py에서 HttpResponse를 직접 이용하여 html을 사용해왔었다.

But,

아래그림처럼 하면 될까? 그러기엔 views.py가 너무 지저분한 느낌이 드는 것 같다. 또한, 여기 모든 html코드를 넣는다면 가독성도 떨어질 것이다.

따라서, 위의 부분을 별도의 html 파일로 빼주는 것이 좋다.

이렇게 따로 화면 구성을 담당하는 부분을 Template 이라고 한다. Template을 사용하기 위해 아래처럼 샌드위치 구조로 디렉토리를 생성해주어야 한다. (이유는 다음 챕터에서 설명)

  • 위 그림은 index.html의 코드이다.

II. Rendering 알아보기

이제 이 index.html을 화면에 뿌려주어야 한다. 그것을 바로 Template을 Render 한다 라고 한다.

Template을 Render 하는 방법은 아래와 같다.

  • render함수는 우리가 보내준 데이터(request)와 템플릿(foods/index.html)을 토대로 HttpResponse객체를 만들어서 return 해준다.

그럼 다음처럼 잘 출력되는 것을 볼 수 있다.

👀 render 함수 좀 더 알아보기

✔ render( )

render( request, template_name, context=None, context_type=None, status=None, using=None )

render 함수는 인자로 주어진 템플릿사전형(dict) 인자인 context와 결합해서 렌더링을 거친 다음 HttpResponse 객체로 반환하는 함수이다. 쉽게 말하면 인자로 넘겨주는 템플릿과 context 데이터를 합쳐서 HttpResponse 객체로 돌려주는 함수인 것이다.

0x01. 필수 인자

이 중에서 필수인자는 requesttemplate_name 이다.

request에는 데이터를 요청한 요청 객체를 넘겨준다. 앞에서 함수형 view의 인자로 들어온 request를 render에 그대로 사용했었는데 ,,,

def view(request):
    return render(request, ...)

이 request를 넘겨주는 이유는 요청에 대한 정보에 접근해서 user, session 등 여러 가지 기능을 구현하기 위해서인 데 이 부분은 다른 토픽에서 함께 다루도록 하겠다. 지금은 아 request 객체가 필요하구나! 정도만 알아두면 된다.

template_name은 렌더링에 사용할 대상 템플릿을 명시한다.

0x02. 선택 인자

다음으로 선택 인자를 보면,

context 는 템플릿에 추가할 값들이 들어 있는 사전형 인자로 기본값은 아무것도 없는 None이다.
content_type 은 결과로 만들어 내는 문서의 유형을 말하며 기본값은 'text/html' 즉 HTML 웹 페이지이다.
status 는 상태 코드(Status Code) 값이며 기본값은 200(성공)이다. 상태 코드는 클라이언트의 요청이 성공적으로 처리되었는지에 대한 정보를 주는 코드인데 뒤에서 자세하게 다루도록 하겠다.
using 은 템플릿을 렌더하는 템플릿 엔진을 지정할 수 있는 인자이다. 원하는 경우 다른 템플릿 엔진을 사용하여 템플릿을 렌더링할 수 있다.

두 개의 render

사실 우리가 알고 있는 과정 중 'render'라고 불리는 과정은 두 가지가 있다. 우리가 Django Template Language를 써서 작성한 코드를 읽어서 일반적인 HTML 코드로 바꿔주는 과정도 rendering이라고 하고, 이 HTML 파일을 브라우저가 읽어서 우리가 실제로 보는 이쁜 웹 페이지로 바꿔주는 과정도 rendering이라고 한다. 그러니까 서버에서 Django 코드를 render 해서 HTML 파일로 만들고 그 다음 웹 브라우저에서 HTML 파일을 render 해서 우리가 보는 웹페이지로 바꿔주는 것이다. Django 강의에서 말하는 render는 대부분 Template Language를 사용한 Django 코드를 HTML로 바꿔주는 과정을 일컫기는 하지만 이 두 가지 과정 모두 render라는 것을 기억하자.

profile
hello world :)

0개의 댓글