ABOUT ME

IT와 컴퓨터 관련 팁, 파이썬 등과 아파트 정보, 일상적인 경험 등의 생활 정보를 정리해서 올리는 개인 블로그

  • [django] 파이썬 Django(장고) 템플릿 문법
    코딩 연습/코딩배우기 2020. 9. 22. 21:44
    반응형

     

    [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로 배우는 쉽고 빠른 웹개발 파이썬 웹프로그래밍

     

     

    반응형
Designed by goodthings4me.