[Django] Template & URLs

Yujin·2023년 10월 4일
0
post-thumbnail

DTL (Django Template Language)

  • Template에서 조건, 반복, 변수 등의 프로그래밍적 기능을 제공하는 시스템
  • Python처럼 일부 프로그래밍 구조(if, for 등)를 사용할 수 있지만 명칭을 그렇게 설계했을 뿐, Python 코드로 실행되는 것이 아니며 Python과는 무관
  • 프로그래밍적 로직이 아닌 프레젠테이션을 위한 것
  • 프로그래밍적 로직은 되도록 view 함수에서 작성 및 처리

DTL Syntax

1. Variable

  • render 함수의 세번째 인자로 딕셔너리 데이터를 사용
  • 딕셔너리 key에 해당하는 문자열이 template에서 사용 가능한 변수명이 됨
  • dot(.)를 사용하여 변수 속성에 접근할 수 있음

2. Filters

  • 표시할 변수를 수정할 때 사용
  • chained가 가능하며 일부 필터는 인자를 받기도 함
  • 약 60개의 built-in template filters를 제공
  • {{ variable|filter }}
  • {{ name|truncatewords:30 }} : 30단어까지만 보여줌

3. Tags

  • 반복 또는 논리를 수행하여 제어 흐름을 만듦
  • 일부 태그는 시작과 종료 태그가 필요
  • 약 24개의 built-in tempalte tags를 제공
  • {% tag %}
  • {% if %} {% endif %}

4. Comments

  • DTL에서의 주석

상속

  • extends
    • 자식(하위) 템플릿이 부모 템플릿을 확장한다는 것을 알림
    • 반드시 템플릿 최상단에 작성 (2개 이상 사용 불가)
    • {% extends 'path' %}
  • block’ tag
    • 하위 템플릿에서 재정의 할 수 있는 블록을 정의
    • 하위 템플릿이 작성할 수 있는 공간을 지정
    • {% block name %}{% endblock name %}

HTML form

  • HTTP 요청을 서버에 보내는 가장 편리한 방법
  • ‘form’ element
    • 사용자로부터 할당된 데이터를 서버로 전송
    • 웹에서 사용자 정보를 입력하는 여러 방식
    • text, password, checkbox 등을 제공
  • form의 핵심 속성 2가지
    • 데이터를 어디(action)로 어떤 방식(method)으로 요청할지
    1. action
      • 입력 데이터가 전송될 URL을 지정 (목적지)
      • 만약 이 속성을 지정하지 않으면 데이터는 현재 form이 있는 페이지의 URL로 보내짐
    2. method
      • 데이터를 어떤 방식으로 보낼지 정의
      • 데이터의 HTTP request methods(GET, POST)를 지정
  • ‘input’ element
    • 사용자의 데이터를 입력받을 수 있는 요소
    • type 속성 값에 따라 다양한 유형의 입력 데이터를 받는다.
    • ‘name’ attribute
      • 입력한 데이터에 붙이는 이름 (key)
      • 데이터를 제출했을 때 서버는 name 속성에 설정된 값을 통해서만 사용자가 입력한 데이터에 접근할 수 있다.
  • HTTP request 객체
    • form으로 전송한 데이터뿐만 아니라, 모든 요청 관련 데이터가 담겨 있음
    • view 함수의 첫 번째 인자

추가 템플릿 경로 지정

  • 템플릿 기본 경로 외 커스텀 경로 추가하기
  • 기존 {% extends 'articles/base.html' %} 에서 {% extends base.html' %}로 변화

URL dispatcher

  • URL 패턴을 정의하고 해당 패턴이 일치하는 요청을 처리할 view 함수를 연결(매핑)

Variable Routing

  • URL 일부에 변수를 포함시키는 것

    • 변수는 view 함수의 인자로 전달할 수 있음
  • <path_converter:variable_name>

    • path converters
      • URL 변수의 타입을 지정
      • str, int 등 5가지 타입 지원
      • string은 기본값으로 생략 가능
        • path('hello/<str:name>/', views.greeting) = path(’hello/<name>/’, views.greeting) (동일)

App URL mapping

  • 각 앱에 URL을 정의하는 것
  • 프로젝트와 각 앱이 URL을 나누어 관리하기 편하게 하기 위함
    • include()
      • 프로젝트 내부 앱들의 URL을 참조할 수 있도록 매핑하는 함수
      • URL의 일치하는 부분까지 잘라내고 남은 문자열 부분은 후속 처리를 위해 include된 URL로 전달

Naming URL patterns

  • URL에 이름을 지정하는 것
  • path 함수의 name 인자를 정의해서 사용
  • ‘url’ tag

    • {% url 'url-name' arg1 arg2 %}
    • 주어진 URL 패턴의 이름과 일치하는 절대 경로 주소를 반환
  • ex. articles 앱의 url 이름과 pages 앱의 url 이름이 같은 상황

    • 단순히 이름만으로는 완벽하게 분리할 수 없음

      → 이름에 성(key)을 붙여 해결

0개의 댓글