티스토리 뷰

The Django template language

HTML에 작업하기 편하도록 설계된 장고 템플릿 언어를 살펴봅시다.

Django 템플릿 언어

참조 원문 : https://docs.djangoproject.com/en/1.5/topics/templates/
장고(Django) 템플릿을 수정하려면 반드시 이해하고 넘어가야 할 부분이 바로 Django 템플릿 시스템의 언어 구문이 아닐까 생각됩니다. 오늘은 Django 템플릿 언어를 개략적으로 이해하여 보도록 하겠습니다.

만약 Smarty나 CheetahTemplate 등과 같은 텍스트 기반 템플릿 언어들에 익숙한 유저라면 Django 템플릿 언어는 정말 누워서 떡 먹기라 생각될 겁니다. 그런데 템플릿 언어라는 말이 생소한 유저라면 다르죠. 템플릿 언어를 이해하기 위해서는 템플릿 엔진을 먼저 알아야 하는데 템플릿 엔진 부분은 다른 포스팅에서 이야기 하도록 하겠습니다.

템플릿

템플릿은 쉽게 말해 텍스트 파일입니다. 이걸로 HTML, XML, CSV 등 과 같은 텍스트 기반 형식들을 생성 할 수 있습니다. 오늘 이야기에서는 HTML을 생성하게 되고요. 템플릿은 템플릿이 평가했을 때 값으로 바뀌어질 변수들과 템플릿의 논리 제어를 위한 태그들이 포함되어 있습니다. 다음에 몇 가지 기본 사항을 보여주는 최소한의 템플릿을 보도록 합시다.

{% extends "base_generic.html" %}
{% block title %}{{ section.title }}{% endblock %}
{% block content %}
<h1>{{ section.title }}</h1>
{% for story in story_list %}
<h2>
  <a href="{{ story.get_absolute_url }}">
    {{ story.headline|upper }}
  </a>
</h2>
<p>{{ story.tease|truncatewords:"100" }}</p>
{% endfor %}
{% endblock %}

변수


변수는 다음과 같습니다 : {{변수}}. 템플릿 엔진이 변수를 감지하면 해당 변수를 평가하고 그것을 결과로 바꿉니다. 변수 이름은 문자와 숫자의 조합과 밑줄(“_”)로 구성되며 점 ( ".") 또한 변수 섹션에 표시됩니다. 중요한 것은 변수 이름에 공백이나 구두점을 가질 수 없다는 점입니다. 변수의 속성에 액세스하기 위해서는 점 (.)을 사용합니다. 템플릿 시스템이 점을 감지하면 템플릿은 다음의 검색들을 시도합니다. Dictionary lookup, Attribute lookup, Method call, List-index lookup. 위의 예에서 {{ section.title }}은 section 오브젝트의 title 속성으로 바뀌어 집니다. 만약 존재하지 않는 변수를 사용하는 경우 템플릿 시스템은 기본적으로 '' (빈 문자열)로 설정되어있는 TEMPLATE_STRING_IF_INVALID 설정 값을 삽입합니다.

주의 할 점은 템플릿 문맥에 내에 같은 변수가 하나 이상 존재 하면, 템플릿 내의 {{ foo.bar }} 처럼 표시되는 “bar”는 문자열 스트링 으로 해석됩니다. 변수 “bar”의 값으로 사용되지 않습니다.

필터

필터를 사용함으로써 변수의 표현(포맷)을 변경할 수 있습니다. 간단히 말해 필터를 통과하면 포맷이 변환된 변수가 나오는거라 생각됩니다. 가령필터는 다음 예와 같이 씁니다 : {{ name | lower }}. 중간에 막대기(| : 파이프(pipe) 문자)는 name변수를 lower라는 필터로 전달하는 것을 말하네요.텍스트를 소문자로 변환하는 lower 필터로 여과 한 후 {{ name }} 변수의 값을 표시합니다. 이처럼 필터를 적용하려면 파이프 ( | )를 사용합니다. 필터는 "chained" 할 수 있습니다. 흠… 연결해서 쓸 수 있습니다. 필터의 출력은 다음 예와 같이 적용됩니다. {{ text | escape | linebreaks }} 은 <p> 태그를 줄 바꿈을 변환하는 일반적인 관용구입니다. 또한 일부 필터는 인수를 취합니다. 필터 인수는 다음 예와 같습니다. {{ bio | truncatewords : 30 }}. 이것은 bio 변수의 첫 번째 30개의 단어가 표시될 것입니다.

공백이 포함 된 필터 인수는 따옴표로 묶여 집니다. 예를 들어, 다음 예는 콤마(,)와 빈 줄을 사용해서 리스트 목록에 추가되어 질 겁니다. {{ list | join:”, “ }}

Django는 약 30 내장 템플릿 필터를 제공합니다. 내장 필터 레퍼런스(built-in filter reference) 에는 이에 대한 내용이 있으니 참조하면 됩니다.

태그(Tags)

태그는 다음과 같습니다 {% tag %}. 태그는 변수보다 복잡합니다 : 일부는 출력 텍스트를 만들고, 일부는 루프와 논리의 수행을 통해 흐름을 제어하며, 일부는 이후 변수들에 의해 사용되도록 하는템플릿으로 외부 정보를 읽어 들입니다.

일부 태그는 태그 시작태그와 종료태그가 필요합니다 (예: {% tag %} ... 태그 내용 ... {%의 endtag %}).

장고(Django)는 약 스무 내장 템플릿 태그를 갖고 있습니다. built-in tag reference를 참조하세요. 여기에 태그의 일반적인 사용을 보여줍니다.

for
배열의 각 항목을 반복합니다. 예를 들어, athlete_list에 있는 athletes의 목록을 표시하죠.

<ul>
{% for athlete in athlete_list %}
    <li>{{ athlete.name }}</li>
{% endfor %}
</ul>

Comments

템플릿 내에서 코멘트 출력을 위해서 {# 도움말 #} 구문을 사용합니다.

마치며

사실 템플릿의 상속 부분도 적어야 하는데 글이 너무 길어지는군요. 다음에는 템플릿의 뼈대를 만드는 템플릿 상속에 관해 이야기 해보도록 하겠습니다. 감사합니다~ ^^