Django : Templates & URLs
- Django Template system
데이터 표현을 제어하면서, 표현과 관련된 부분을 담당한다.
- HTML의 콘텐츠를 변수 값에 따라 바꾸기
- Django Template Language (DTL)
템플릿에서도 조건, 반복, 변수 등의 프로그래밍적 기능을 제공하는 시스템
- Variable (변수)
render 함수의 세번째 인자로 딕셔너리 데이터를 사용한다.
딕셔너리 key에 해당하는 문자열이 템플릿에서 사용 가능한 변수명이 된다.
딕셔너리 안에 또 다른 딕셔너리 또는 속성을 가질 경우에는 dot(’.’)을 사용하여 변수 속성에 단계적으로 추가 접근할 수 있다. - Filters
표시할 변수를 수정할 때 사용한다. ( 변수 + ‘|’ + 필터 )
약 60개의 내장 필터가 만들어져있어서 활용하면 된다.
연결이 가능하며 일부 필터는 인자를 받기도 한다. - Tags
반복 또는 논리를 수행하여 제어 흐름을 만든다. 일부 태그는 시작과 종료 태그가 중요하다. 약 24개의 내장 태그를 제공한다. - Comments
주석은 {# name #} 이렇게 짧게 기술되고
코멘트는
{% comment %}
…
{% comment %}
이렇게 길게 들어간다.
- 템플릿 상속
페이지의 공통요소를 포함하고, 하위 템플릿이 재정의할 수 있는 공간을 정의하는 기본 skeleton 템플릿을 작성하여 상속 구조를 구축한다.
‘extends’ tag
→ 자식 템플릿이 부모 템플릿을 확장한다는 것을 알림
반드시 자식 템플릿 최상단에 작성되어야 하고 1개만 사용 가능하다!
‘block’ tag
→ 하위 템플릿에서 재정의할 수 있는 블록을 정의한다.
상위 템플릿에 작성하며 하위 템플릿이 작성할 수 있는 공간을 지정한다.
- HTTP 요청을 서버에 보내는 방법
- URL을 입력해서 요청
- 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>
- path converters
URL 변수의 타입을 지정 ( str, int 등 5가지 타입을 지원 )
- Trailing Slashes
Django는 URL 끝에 ‘/’가 없다면 자동으로 붙인다.
엄밀히 foo.com/bar 와 foo.com/bar/는 별개의 URL이지만, Django는 검색 엔진이 혼동하지 않도록 무조건 ‘/’를 붙여준다. 그러나 모든 프레임워크가 이렇게 동작하지는 않기 때문에 ‘/’ 붙이는 것에 주의하자!
- App URL mapping
각 앱에 URL을 정의하는 것!
프로젝트와 각 앱이 URL을 나누어 관리를 편하기 하기 위함이다.
- include()
프로젝트 내부 앱들의 URL을 참조할 수 있도록 매핑하는 함수
URL의 일치하는 부분까지만 잘라내고, 이후 문자열 부분은 include된 URL로 전달한다.
- Naming URL patterns
URL에 이름을 지정하는 것, path 함수의 name 인자를 정의하여 사용한다.