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 변수에 정의한 이름 공간의 이름
{% with %}
with ~ endtith 내에서 특정 값을 변수에 저장해두는 기능
{% with total = business.employees.conut %}
{{ total }} people works at business
{% endwith %}
{% load %}
- 필터 및 사용자 정의 태그를 로딩해줌
# 템플릿 주석
- {# #} # 한 문장의 전부 또는 일부 주석 처리
- {% comment %} # 여러 줄 주석문
# XSS 공격 방지 위한 자동 이스케이프 기능
- > (less than) <
- < (greater than) >
- ' (single quote) '
- " (double quote) "
- & (ampersand) &
※ 자동 이스케이프 기능 비활성화 필요 시
safe 필터 사용 {{dat|safe }}
autoescape 태그 사용 {% autoescape off %}
# 템플릿 상속
- 상속하는 부모 템플릿에서는 {% block %} {% endblock %} 태그 사용
- 상속 받는 자식 템플릿에서는 {% extends %} 태그를 상단에 표시
[참고] Django로 배우는 쉽고 빠른 웹개발 파이썬 웹프로그래밍
'코딩 연습 > 코딩배우기' 카테고리의 다른 글
[python] 파이썬으로 비밀번호 유효성 검사하는 코딩하기 (0) | 2020.09.24 |
---|---|
[python] 파이썬 datetime() 함수로 살아온 연월일 계산하기(코딩 연습) (0) | 2020.09.23 |
[python] 파이썬 스페셜 메소드 (Special Method) 사용 예제 (0) | 2020.09.22 |
[python] 파이썬 재귀함수, 람다 함수 연습 (0) | 2020.09.21 |
[python] 파이썬 datetime(), time(), localtime() (0) | 2020.09.20 |
댓글