Web, Django, DB

Django : Templates & URLs

Disciple428 2024. 3. 14. 20:23
  • Django Template system

데이터 표현을 제어하면서, 표현과 관련된 부분을 담당한다.

  • HTML의 콘텐츠를 변수 값에 따라 바꾸기

 

  • Django Template Language (DTL)

템플릿에서도 조건, 반복, 변수 등의 프로그래밍적 기능을 제공하는 시스템

  1. Variable (변수)
    render 함수의 세번째 인자로 딕셔너리 데이터를 사용한다.
    딕셔너리 key에 해당하는 문자열이 템플릿에서 사용 가능한 변수명이 된다.
    딕셔너리 안에 또 다른 딕셔너리 또는 속성을 가질 경우에는 dot(’.’)을 사용하여 변수 속성에 단계적으로 추가 접근할 수 있다.
  2. Filters
    표시할 변수를 수정할 때 사용한다. ( 변수 + ‘|’ + 필터 )
    약 60개의 내장 필터가 만들어져있어서 활용하면 된다.
    연결이 가능하며 일부 필터는 인자를 받기도 한다.
  3. Tags
    반복 또는 논리를 수행하여 제어 흐름을 만든다. 일부 태그는 시작과 종료 태그가 중요하다. 약 24개의 내장 태그를 제공한다.
  4. Comments
    주석은 {# name #} 이렇게 짧게 기술되고
    코멘트는
    {% comment %}

    {% comment %}
    이렇게 길게 들어간다.

 

  • 템플릿 상속

페이지의 공통요소를 포함하고, 하위 템플릿이 재정의할 수 있는 공간을 정의하는 기본 skeleton 템플릿을 작성하여 상속 구조를 구축한다.

 

‘extends’ tag

→ 자식 템플릿이 부모 템플릿을 확장한다는 것을 알림

반드시 자식 템플릿 최상단에 작성되어야 하고 1개만 사용 가능하다!

 

‘block’ tag

→ 하위 템플릿에서 재정의할 수 있는 블록을 정의한다.

상위 템플릿에 작성하며 하위 템플릿이 작성할 수 있는 공간을 지정한다.

 

  • HTTP 요청을 서버에 보내는 방법
  1. URL을 입력해서 요청
  2. Form을 통해 요청

 

  • ‘form’ element

사용자로부터 할당된 데이터를 서버로 전송

웹에서 사용자 정보를 입력하는 여러 방식을 제공한다. (text, password, checkbox 등등)

 

  • action & method

form의 핵심 속성 2가지

데이터를 어디로, 어떤 방식으로 요청할 지를 지정하는 속성

 

action : 입력 데이터가 전송될 URL을 지정 (목적지) 속성을 지정하지 않으면 데이터는 현재 form이 있는 페이지의 URL로 보내짐.

 

method : 데이터를 어떤 방식으로 보낼 것인지 정의 데이터의 HTTP request methods (GET, POST) 를 지정함.

 

  • ‘input’ element

사용자의 데이터를 입력받을 수 있는 요소

type 속성 값에 따라 다양한 유형의 입력 데이터를 받음

 

  • ‘name’ attribute

input의 핵심 속성, 입력한 데이터에 붙이는 이름 (key)

데이터를 제출하면 서버는 name 속성에 설정된 값을 통해서만 사용자가 입력한 데이터에 접근할 수 있다.

  • Query String Parameters

사용자의 입력 데이터를 URL 주소에 파라미터를 통해 서버로 보내는 방법

문자열은 앰퍼샌드(&) 로 연결된 key=value 쌍으로 구성되며, 기본 URL과는 물음표(?)로 구분된다.

ex) https://search.naver.com/search.naver?query=아이유

 

  • HTTP request 객체

form 으로 전송한 데이터 뿐만 아니라 모든 요청 관련 데이터가 담겨있다.

( view 함수의 첫번째 인자 )

 

  • BASE_DIR

setting에서 경로지정을 편하게 하기 위해 최상단 지점(프로젝트 폴더도 포함하는 최상위 폴더 = manage.py 가 위치한 곳)을 가리키는 변수

 

  • form 데이터를 가져오는 방법

request

 

  • DTL 주의사항

python처럼 일부 프로그래밍 구조(if, for 등)를 사용할 수 있지만 실제로 python 코드가 실행되는 것은 아니며, python과 관련 없다.

프로그래밍적 로직은 되도록 view 함수에서 작성 및 처리하는 것이 바람직하다.

 

  • URL dispatcher (운항 관리자, 분배기)

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

 

  • Variable Routing

URL 일부에 변수를 포함시키는 것 ( 변수는 view 함수의 인자로 전달 )

작성법

→ <path_converter:variable_name>

ex) int:num , str:name

 

  • path converters

URL 변수의 타입을 지정 ( str, int 등 5가지 타입을 지원 )

 

  • Trailing Slashes

Django는 URL 끝에 ‘/’가 없다면 자동으로 붙인다.

엄밀히 foo.com/barfoo.com/bar/는 별개의 URL이지만, Django는 검색 엔진이 혼동하지 않도록 무조건 ‘/’를 붙여준다. 그러나 모든 프레임워크가 이렇게 동작하지는 않기 때문에 ‘/’ 붙이는 것에 주의하자!

 

  • App URL mapping

각 앱에 URL을 정의하는 것!

프로젝트와 각 앱이 URL을 나누어 관리를 편하기 하기 위함이다.

 

  • include()

프로젝트 내부 앱들의 URL을 참조할 수 있도록 매핑하는 함수

URL의 일치하는 부분까지만 잘라내고, 이후 문자열 부분은 include된 URL로 전달한다.

 

  • Naming URL patterns

URL에 이름을 지정하는 것, path 함수의 name 인자를 정의하여 사용한다.