작성
·
22
답변 2
1
안녕하세요.
파이썬/장고나 여러 프로그래밍 언어/웹프레임워크에서는 템플릿(Template) 시스템을 지원해줍니다.
템플릿은 컨텐츠(데이터)를 채우기 위한 일관된 틀을 제공하는 데요. 파워포인트의 템플릿과 비슷한 역할로 볼 수 있습니다.
단, 장고의 템플릿 시스템은 보다 손쉬운 문자열 조합을 지원함을 목적으로 합니다.
아래와 같은 데이터가 있을 때,
아래와 같은 문자열을 만들어서, 이메일이나 문자 메세지로 보낼려는 상황으로 가정해보겠습니다.
템플릿 시스템을 쓰지 않고, name 값과 product_list 값을 참조해서 위 문자열을 조합을 할려면, 파이썬 언어 레벨에서 직접 문자열을 조합해야 하는 데, 이는 문자열 포맷에 맞춰 일일이 파이썬 코드를 구현해야하는 번거로움이 있고, 문자열(특히 HTML)과 파이썬 로직이 혼합되어 코드의 가독성이 떨어지고, 재사용성도 무척 낮습니다. // 주문량이 3개 이상인 상품만 필터링해서 조합할려면, 파이썬 코드를 또 추가해야 합니다.
그런데, 템플릿 시스템을 활용하면, 문자열 구성에 대한 부분은 템플릿에 모두 명세할 수 있기 때문에, 재사용성과 유지보수성이 증가됩니다. 템플릿 시스템 자체적으로 조건문, 반복문, 필터 등을 제공하기 때문에, 파이썬 코드 작성없이도 템플릿 문법 만으로 복잡한 문자열을 조합할 수 있게 됩니다.
네이버 뉴스 페이지에서의 아래 HTML 코드도 템플릿 시스템을 통해 조합된 문자열입니다. 템플릿 시스템없이 이렇게 복잡한 문자열을 조합하는 것은 거의 불가능합니다.
살펴보시고, 추가 질문은 댓글로 남겨주세요.
화이팅입니다. ;-)
Template 은 저수준에서 장고 템플릿 시스템을 활용한 것이구요. render 숏컷 함수는 고수준에서 내부적으로 Template 시스템을 활용합니다. Template 객체를 직접 활용하는 예시는 아래와 같은데요. 이렇게 직접 Template 객체를 활용하실 일은 드물구요.
대개 처음에는 장고 View에서 HTML 문자열 생성 목적으로 템플릿 시스템을 활용하시게 됩니다. 이때 render 숏컷 함수를 사용하시면 편리하구요. render 함수는 요청객체 request 인자를 요구합니다. 이는 View 의 응답 내용으로서 현재 로그인 유저 정보 등을 만들어내기 위해서, 요청객체가 꼭 필요하기 때문에, render 함수가 그렇게 설계되어있습니다.
0
안녕하세요, 인프런 AI 인턴입니다. sunnnwo님.
템플릿에 대한 명확한 이해를 도와드리겠습니다. 템플릿이란 웹 개발에서 동적 콘텐츠를 생성하기 위한 틀 또는 서식을 의미합니다. 템플릿은 변수와 제어 구조를 포함하여 개발자가 서버 또는 클라이언트에서 데이터와 함께 동적으로 렌더링할 수 있도록 돕습니다.
Django에서는 템플릿 엔진을 사용하여 HTML 파일을 구성할 수 있습니다. 이러한 템플릿 파일은 실제 데이터를 적용할 수 있는 자리 표시자와 제어 흐름을 포함하며, 결국 사용자에게 보일 최종 웹 페이지로 렌더링됩니다.
만약 이 설명이 충분하지 않거나 추가 질문이 있으시다면, django 템플릿에 관한 질문이 다음 게시글에서 언급된 바가 있으니 참고하시길 바랍니다.
이 게시글에서는 Django 템플릿의 역할과 사용 사례 등을 더 적절하게 이해하는 데 도움이 될 수 있는 정보를 찾으실 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
이 부분에서 template_str = ""
template = Template(template_str)의 역할이 궁금합니다. 그리고 name이나 product등의 클래스나 변수등은 views.py에서 index함수등을 return render(request = request, template_name ="hottrack/index.html", context={ "song_list": song_qs, "query": query, },) 하면서 가져오는게 맞을까요? 사실 def index(request): 를 쓸때도 request의 사용 이유를 정확하게 이해 못한것도 있습니다. 감사합니다.