본문 바로가기
코딩 연습/코딩배우기

[django] 파이썬 Django(장고) 템플릿 문법

by good4me 2020. 9. 22.

goodthings4me.tistory.com

 

[django] 파이썬 Django(장고) 템플릿 문법

Django(장고)의 템플릿시스템은 템플릿코드를 해석해서 템플릿 파일을 만드는데, 이 과정을 렌더링이라고 하며, 결과물인 템플릿 파일은 HTML, XML, JSON 등의 텍스트 파일이다.

 

■ 템플릿 변수

  • 사용 형식 : {{ variable }}
  • 변수명은 일반 프로그래밍처럼 문자, 숫자, 밑줄(_) 사용하여 정의
  • 변수 속성 접근도 도트(.)표현식으로 가능

 

■ 템플릿 필터 

  • 필터는 파이프(|) 문자 사용
  • 장고는 약 60여가지 필터를 제공하고 있으며, 사용자 정의 필터도 만들 수 있다.

{{ name|lower}}  # name 변수값의 문자를 소문자로 변경

{{ text|escape|linebreaks }}  # (필터 체인 가능) text 변수값 중 특수문자를 이스케이프하고, 
그 결과 스트링에 <p>태그 적용

{{ bio|truncatewords:30 }}  # (인자있는 필터) bio 변수값 중 앞에서 30개 단어만 보여주고, 
줄바꿈 문자는 모두 없애줌

{{ list|join:" // " }}  # list 변수값에 join 적용, 필터 인자의 빈칸은 따옴표로 묶어줌
list가 ['a', 'b', 'c']인 경우, "a // b // c"

{{ value|default:"nothing" }}  # value 변수값이 False이거나 없는 경우, "nothing"으로 보여줌

{{ value|length }}  # value 변수값의 길이 반환(스트링이거나 리스트인 경우도 가능)

{{ value|striptags }}  # value 변수값에서 HTML tag 없애줌 

{{ value|pluralize }}  # 복수 접미사 필터, value 변수값이 1이 아니면 복수 접미사 s 붙임

다른 복수 접미사 es, ies는 필터에 인자를 사용함
{{ value|pluralize:"es" }} 또는 {{ value|pluralize:"ies" }}

{{ value|add:2 }}  # 더하기 필터, value 변수값이 4이면, 결과는 6
* 정수가 아닌 경우, 더하기를 시도하고, 실패하면 빈 문자열 반환

 

■ 템플릿 태그

  • 텍스트 결과물을 만들기도 하고, 템플릿 로직 제어, 외부 파일을 템플릿 내 로딩 등의 기능
  • 사용형식 : {% tag %}  # 시작태그와 끝태그가 있는 태그 있음

{% for %} {% endfor %}

리스트에 담겨 있는 항목을 순회하면서 출력 가능

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

※ {% for %} 태그 loop 사용할 수 있는 변수

forloop.counter 현재까지 루프를 실행한 loop counter(1부터 카운트함) 
forloop.counter0 현재까지 루프를 실행한 loop counter(0부터 카운트함) 
forloop.recounter loop 끝에서 현재가 몇 번째인지 카운트한 숫자(1부터 카운트함)
forloop.recounter0 loop 끝에서 현재가 몇 번째인지 카운트한 숫자(0부터 카운트함)
forloop.first loop에서 첫 번째 실행이면 True 값 가짐
forloop.last loop에서 마지막 실행이면 True 값 가짐
forloop.parentloop 중첩된 루프에서 현재의 루프 바로 상위의 루프를 의미함

 

{% if %} {% endif %}

  • 변수를 평가하여 True이면 바로 아래 문장 실행
  • 중첩if문 {% if %} {% elif %} {% else %} {% endif %}  가능
  • {% if %} 태그에 필터와 연산자 사용 가능
  • 주의할 점은, 필터가 스트링을 반환 시 산술연산 안됨 (단, length 필터는 가능)
  • and, or, not, and not, >, >=, <. <=, ==, !=, in, not in 연산도 가능

 

{% csrf_token %}

  • CSRF 공격 방지 위한 태그이며, 장고는 내부적으로 CSRF 토큰값의 유효성을 검증함
  • <form> 태그 바로 첫 줄에 넣어줌

 

{% url %}

  • html 소스에 URL 하드코딩하는 것을 방지하기 위함
  • 사용 형식 {% url 'namespace:view-name' arg1 arg2 %}
    ※ namespace는 include() 함수 또는 app_name 변수에 정의한 이름 공간의 이름

 

Ad


         
{% with %}

with ~ endtith 내에서 특정 값을 변수에 저장해두는 기능

{% with total = business.employees.conut %} 
    {{ total }} people works at business 
{% endwith %}

 

 

{% load %}

  • 필터 및 사용자 정의 태그를 로딩해줌 

 

# 템플릿 주석

  • {# #}  # 한 문장의 전부 또는 일부 주석 처리
  • {% comment %}  # 여러 줄 주석문

 

# XSS 공격 방지 위한 자동 이스케이프 기능

  • > (less than)     &lt;
  • < (greater than)  &gt
  • ' (single quote)  &#39
  • " (double quote)  &quot
  • & (ampersand)     &amp

※ 자동 이스케이프 기능 비활성화 필요 시

safe 필터 사용 {{dat|safe }} 
autoescape 태그 사용 {% autoescape off %}

 

# 템플릿 상속

  • 상속하는 부모 템플릿에서는 {% block %} {% endblock %} 태그 사용
  • 상속 받는 자식 템플릿에서는 {% extends %} 태그를 상단에 표시

 

[참고] Django로 배우는 쉽고 빠른 웹개발 파이썬 웹프로그래밍

 

 

댓글