11. Template Tag(템플릿 태그)
템플릿 태그는 {% tag %} 형식을 가진다.
- {% for %} 태그
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}<li>
{% endfor %}
</ul>
리스트에 담겨 있는 항목들을 순회하면서 출력
변수명 | 설명 |
forloop.counter | 현재까지 루프를 실행한 루프 카운트(1부터 카운트함) |
forloop.counter() | 현재까지 루프를 실행한 루프 카운트(0부터 카운트함) |
forloop.revcounter | 루프 끝에서 현재가 몇 번째인지 카운트한 숫자(1부터 카운트) |
forloop.revcounter() | 루프 끝에서 현재가 몇 번째인지 카운트한 숫자(0부터 카운트) |
forloop.first | 루프에서 첫 번째 실행이면 True 값을 가짐 |
forloop.last | 루프에서 마지막 실행이면 True 값을 가짐 |
forloop.parentloop | 중첩된 루프에서 현재의 루프 바로 상위의 루프를 의미함 |
- {% if %} 태그
{% if athlete_list %}
Number of athletes: {{ athlete_list|length }}
{% elif athlete_in_locker_room_list %}
Athletes should be out of the locker room soon!
{% else %}
No athletes.
{% endif %}
변수를 평가하여 조건이 True이면 바로 아래의 문장이 출력된다.
{% if %} 태그에는 불린 연산자를 사용할 수 있다. ex) and, or, not, and not, ==, !=, <, >, <=, >=, in, not in
- {% csrf_token %} 태그
<form action="." method="post">
{% csrf_token %}
POST 방식의 <form>을 사용하는 템플릿 코드에서는 CSRF 공격을 방지하기 위해 이 태그를 사용한다.
이 태그를 사용하면 내부적으로 CSRF 토크값의 유효성을 검증하여 만일 토큰 검증에 실패하면 사용자에게 403에러는 보여준다.
한 가지 주의할 점은 CSRF 토큰값이 유출될 수도 있으므로, 외부 URL로 보내는 <form>에는 사용하지 않도록 한다.
※CSRF 공격이란
CSRF(Cross-Site Request Forgery)는 사이트 간 요청 위조 공격이라는 뜻이다. 특정 웹 사이트에서 이미 인증을 받은 사용자를 이용하여 공격을 시도한다. 인증을 받은 사용자가 공격 코드가 삽입된 페이지를 열면 공격 대상이 되는 웹 사이트는 위조된 공격 명령이 믿을 수 있는 사용자로부터 발송된 것으로 판단하게 되어 공격을 받게 된다.
- {% url %} 태그
{% url 'namespace:view-name' arg1 arg2 %}
- namespace : urls.py 파일의 include() 함수 또는 app_name 변수에 정의한 이름 공간
- view-name : urls.py 파일에서 정의한 URL 패턴 이름
- argN: 뷰 함수에서 사용하는 인자로, 없을 수도 있고 여러 개인 경우 공백으로 구분
<form action={% url 'polls:vote' question.id %} method="post">
주된 목적은 템플릿 코딩을 할때 URL을 하드코딩하는 것을 방지 하기 위해서이다. 이 코드는 다음의 코드와 유사한 코드이다.
<form action="/polls/3/vote/" method="post">
- {% with %} 태그
{% with total=business.employess.count %}
{{ total }} people works at business
{% endwith %}
with 태그는 with 영역에서만 유효한 변수를 정의 하여 사용할 수 있다. 이 태그는 DB를 조회하는 것과 같은 부하가 큰 동작을 결과를 저장해 둠으로써 동일한 동작에 대한 부하를 줄이기 위해 사용한다.
- {% load %} 태그
{% load somelibrary package.otherlibrary %}
사용자 정의 태그 및 필터를 로딩해준다.
출처: 한빛미디어, Django로 배우는 쉽고 빠른 웹 개발 파이썬 웹 프로그래밍