2. 장고 탬플릿 태그, 탬플릿 변수
1 개요
view에서 탬플릿을 호출한 후 변수들을 처리하는데, 이 변수들을 넣을 공간을 태그로 표시하여 처리한다.
파이썬 문법과 다른, 변수들을 처리하기 위해 탬플릿 내에서만 사용되는 문법이다.
2 각종 데이터 불러오기
2.1 객체, 변수 불러오기
태그 | 기능 | 응용 |
---|---|---|
{{변수}}
{{객체}} |
변수를 사용할 수 있다.(객체를 출력한다.)
정의가 되어있지 않은 경우, 빈 문자열이 된다. 빈 문자열은 settings.py에서 TEMPLATE_STRING_IF_INVALID 속성을 지정해주면 된다.(기본 빈문자열) |
|
{{객체.속성}} | 변수처럼 사용한다. '.'문법으로 하위속성에 접근할 수 있다.
하위변수에 접근할 땐 '.'을 쓴다. 다음의 순서로 확인하여 하위값을 반환한다. 1. 사전인가? 2. 속성을 포함했는가?(객체(모델)의 속성을 보여준다.) 3. 리스트인가? 정의되어있지 않은 변수의 경우, 빈 문자열을 반환한다. 이 문자열을 변경하려면 settings.py에서 TEMPLATE_TRINGS_IF... 이걸 지정해주면 된다. |
2.2 테이블(모델) 불러오기
모델 | 설명 | 예시 |
---|---|---|
하위객체 | 예컨대, question이라는 모델 아래에 answer이라는 모델이 연결되어 있다면, question을 템플릿에서 받은 후, 하위 모델에 접근할 수 있다.
{{question.하위모델_set.all}} 형태로 하위모델을 모두 불러올 수 있다.
_set.all : 속성의 모든 레코드 가져오기... |
글에 달린 답변 불러오기. |
상위객체 | 반대로 상위객체를 불러오는 것도 가능하다.
예컨대, Question 모델에서 |
글의 작성자 불러오기. |
2.3 url 불러오기
태그 | 기능 |
---|---|
{% url 인덱스 %} | 하드코딩 대신 인덱스를 쓰기 위한 태그. urls.py의 path에서 name속성에 기입한 인덱스 주소를 불러온다.
앱 이름을 지정했다면 {% url 앱이름:인덱스 %} 형태로 쓰인다. 변수를 보낼 수도 있어 |
2.3.1 템플릿에서 링크 연결
<a href = "{% url '주소' 넘길변수%}">나타낼내용</a>
2.4 정적 파일 불러오기
태그 | 기능 |
---|---|
{% static '파일이름or경로' %} | 정적 파일을 불러올 때 사용하는 태그이다. 해당 파일의 절대경로를 URL로 만들어준다.(경로는 프로젝트루트부터)
href나 src 따위의 경로 안에 이 태그를 사용하면 알아서 찾아와 대입해준다. |
3 조건문
탬플릿 내에서 조건문과 분기문을 사용할 수 있다.
3.1 분기문
형태 | 기능 | 태그 |
---|---|---|
기본형 | 객체가 있는지 확인, 있으면 endif 사이의 문장을 보여준다.
ex) {% if question_list %} 는 question_list가 있을 때 하위의 명령을 실행하라는 의미.
{% endif %}로 닫아주어야 함에 유의. |
{% if 객체 %}
{% endif %} |
여러 조건 넣기 | 조건에 해당하는 부분 사이의 문장을 보여준다. | {% if 조건문1 %}
{% elif 조건문2 %} {% else %} {% endif %} |
3.2 반복문
태그 | 기능 |
---|---|
{% for 변수 in 리스트 %}
{% endfor %} |
파이썬의 문법과 다를 건 거의 없다.
사용할 수 있는 불린연산자는 다음과 같다. |
{% if not forloop.last %} | for문의 마지막인지 아닌지 여부를 담는 변수 등이 있다.
(세거나 그런 것들이...) |
forloop.counter 등 정리해보자.
3.3 기타
3.3.1 보안관련
태그 | 기능 |
---|---|
{% csrf_token %} | CSRF를 공격을 막기 위한 수단.(서버로 들어온 요청이 사이트 내부에서 온 게 맞는지 확인하기 위한 용도)
form태그 바로 아래에 사용한다. |