장고에서 가장 많이 쓰이는 프로그래밍 언어는 무엇일까?
물론 사용하고자하는 목적과 상황에따라 다르겠지만 장고는 파이썬 기반의 웹 프레임워크다보니
아무래도 파이썬 언어를 많이 사용할 것이다.
실제로 장고 내부의 파일들만 눈으로 확인해봐도 대부분의 파일들은 파이썬 파일형식(.py)으로 존재한다.
프로젝트 생성과 앱 생성 등 장고에서 어떤 기능을 수행하게 해주는 manage.py
프로젝트 내의 설정을 관리해주는 settings.py
url을 생성하는 urls.py
url 요청이 들어왔을 때 동작하는 함수를 정의하는 views.py
등 ...
하지만, 우리가 여태껏 작성한 파일들중에 파이썬 언어를 사용하지 않은 것이 있었다.
바로 templates 폴더에서 생성하고 작업했던 html파일이다(.html)
html파일에서는?? 당연히 HTML언어를 사용할 것이다.
그러나, 이전에 로또번호를 출력했던 실습에서 6개의 랜덤한 로또번호를 담고있었던 pick 변수를 HTML파일에서 어떻게 출력했었는지 기억해보면 HTML언어에서는 볼 수 없었던 새로운 문법을 볼 수 있었다.
오늘은 장고의 템플릿파일을 구성해주는 DTL(Django Template Language)에 대해 알아보자.
Django Template Language
앞서 언급한 로또번호추첨 예시에서 변수를 출력하기 위해 pick을 문자 그대로 html파일에 작성해보니 서버를 실행시켰을 때 'pick'문자 그대로 출력이 되어서 우리는 {{ }} 태그를 이용하여 변수에 담긴 내용을 출력할 수 있었다.
이처럼 장고의 Template에서는 기본적으로 HTML언어를 사용할 수 있을뿐만 아니라 파이썬 프로그래머들을 위해
Django Template Language(DTL)라는 언어를 사용할 수 있도록 다양한 문법들을 미리 만들어놨다.
DTL에 관한 장고 공식문서 (https://docs.djangoproject.com/en/3.0/ref/templates/language/)
따라서, 파이썬 파일에서 만든(특히 views.py) 변수, 결과물, 함수 등을 사용하기 위해서는 DTL문법을 알아둬야할 필요가 있다.
DTL문법을 많이 알면 알 수록 장고 내부의 Template을 효율적으로 사용할 수 있을 것이다.
다만, DTL도 언어이다보니 문법의 내용이 상당히 많다.
따라서, 자주 쓰이는 DTL문법에 대해서만 간단하게 설명하고자 한다.
기본문법
1. 출력 {{ }}
views.py에서 context 딕셔너리로 넘어온 변수들을 템플릿파일에서 출력할 때는 {{ }} 를 사용하면 된다.
#ex1
{{ pick }}
#ex2
{{ menu }}
{{ menu.0 }}
주의할 점으로, 파이썬에서는 인덱스를 사용하기위해 대괄호([ ])를 사용했지만 장고 템플릿에서는 대괄호를 사용하지 않고 점(.)을 붙인 다음 인덱스번호를 입력해야 인덱스값에 해당하는 내용을 출력할 수 있다.
2. 문법 {% %}
여기서 말하는 문법이란 파이썬에서 사용하는 반복문, 조건문 등을 말한다. 단순한 변수 출력이 아닌 경우에는 아래 코드처럼 {% %} 안에 내용을 입력해야한다.
{% for menu in menupan %}
{% endfor %}
3. 주석 {# #}
코딩을 할 때 메모를하거나 코드에 대한 설명을 덧붙이기 위해 사용하는 주석은, 내용들을 {# #} 안에 담아두면 된다.
{# 주석내용입니다. #}
반복문
{% for actor in moviews %}
<li>actor</li>
{% endfor %}
파이썬에서 사용했던 반복문은 위와 같이 사용하면 된다.
for문을 사용할 때는 반드시 {% endfor %}로 닫아야한다.
추가 내용
- {{ forloop.counter }} - 반복문을 사용할 때 순서(인덱스)를 같이 출력(단, 숫자 1부터 시작)
- {{ forloop.counter0 }} - 파이썬처럼 숫자 0번부터 시작하고 싶으면 counter뒤에 숫자 0을 붙이면 된다.
- {% empty %} - 반복문을 시행하였을 때 값이 없는(empty)의 경우사용(조건처럼 사용) {% empty %}아래 해당 조건이 발생하였을 때 실행할 코드를 입력하면 된다.
조건문
{% if actor == 'Mr.Kim' %}
<p>김씨 입니다.</p>
{% else %}
<p>김씨가 아닙니다.</p>
{% endif %}
조건문도 반복문처럼 {% %}문법안에 조건문을 넣어주면되며 else조건을 사용할 때는 {% else %}로 표현하면 된다.
또한, 반복문처럼 조건문을 사용할때는 반드시 {% endif %}로 닫아줘야한다.
built-in tage, filter
filter는 '|' 문자를 이용하여 사용하며 파이썬에서 제공하는 함수라고 생각하면 된다.
그 중 두 가지 |length 와 |truncatechars 를 소개한다.
1. |length
{{ 변수|length }}로 표현
길이를 출력해준다. (파이썬의 len()과 동일)
2. |truncatechars:
{{ 변수|truncatechars:숫자 }}
변수의 길이에 제한을 두고 싶을 때 사용
#이름의 길이를 출력
{{ name|length }}
#이름을 10글자까지만 출력
{{ name|truncatechars:10 }}
이 밖에도 장고에서 제공하는 태그, 필터들의 내용은 매우 많으니 공식문서를 통해 필요한 문법들을 찾아서 사용할 줄 아는 능력을 기르는것이 중요하다.
'django' 카테고리의 다른 글
#django day6 (0) | 2020.04.30 |
---|---|
#django day5 (0) | 2020.04.28 |
#django day4 (0) | 2020.04.28 |
#django day3 (0) | 2020.04.26 |
#django day2 (0) | 2020.04.25 |
댓글