# view 함수defindex(request):
context ={'name':'조정곤',}# render 함수의 3번째 인자(context 딕셔너리)에 담아 템플릿으로 보냄return render(request,'articles/index.html', context)
<body><h1>Hello, {{ name }}</h1></body>
중괄호 두 개 {{ variable }} 사용
- Filters
표시할 변수를 수정할 때 사용
chained가 가능하며, 일부 필터는 인자를 받기도 함
약 60개 정도의 내장 템플릿 필터(built-in template filters)를 제공
<!--필터 예시--><h1>{{ text|truncatewords:3 }}</h1><!--truncatewords는 앞에서 지정한 개수의 단어만 표시하고 뒤는 (...)으로 처리--><!--즉 변수 text가 'My name is Jeonggon.'이면 위의 예시 필터를 적용하면 'My name is...'으로 표기됨-->
기존 변수 표기법에서 수직바(|)를 사용하고 그 뒤에 필터문 작성 {{ variable|filter }}
<!--태그 예시--><!--반복문 태그 for-->
{% for x, y in points %} There is a point at {{ x }},{{ y }} {% endfor %}
%를 사용 {% tag %}
- Comments
DTL에서 주석을 표시
<!--특정 일부 변수를 주석 처리할 경우--><h1>Hello, {# name #}</h1><!--여러 줄을 주석 처리할 경우-->
{% comment %} {% if name == "Jeonggon" %} {% endif %} {% endcomment %}
특정 일부 변수의 경우 {# 변수명 #}을 사용
여러 줄일 경우 {% comment %}주석 처리 영역{% endcomment %}를 사용
1-3. DTL 예시
# urls.py# url 요청들이 담긴 리스트 urlpatterns
urlpatterns =[
path('admin/', admin.site.urls),
path('articles/', views.index),# dinner/ 주소로 요청을 보내면 path 함수를 통해 dinner/ 주소를 받아 views.py의 dinner 함수를 실행
path('dinner/', views.dinner),]
# views.pyimport random
# views.dinner 요청으로 dinner 함수 실행defdinner(request):# 음식 종류 리스트
foods =['족발','햄버거','치킨','초밥']# 음식 종류 중 랜덤으로 선택된 것 picked에 할당
picked = random.choice(foods)# context 딕셔너리에 데이터 담기
context ={'foods': foods,'picked': picked,}# articles 앱의 템플릿 중 dinner.html에 context 데이터를 보내 렌더링하기return render(request,'articles/dinner.html', context)
페이지의 공통요소를 포함하고, 하위 템플릿이 재정의 할 수 있는 공간을 정의하는 기본 스켈레톤(skeleton = 뼈대) 템플릿을 작성하여 상속
예를 들어 웹 페이지의 head, navbar, footer 등은 공통 레이아웃이므로 모든 템플릿에서 중복해서 작성하는 것은 비효율적임
유튜브 웹 페이지의 콩통요소 - head
또한 동일한 프레임워크, 라이브러리, CDN 등을 모든 템플릿에 적용해야 할 경우에도 중복해서 작성하는 것이 아닌 템플릿 상속을 통해 효율적으로 적용 가능
<!--articles/base.html--><!DOCTYPEhtml><htmllang="en"><head>
...
</head><!--공통요소 부분--><!--재정의 할 수 있는 공간 지정-->
{% block content %} {% endblock content %}
</html>
<!--다른 html 파일-->
{% extends 'articles/base.html' %} {% block content %}
<h1>Hello {{ name }}</h1>
{% endblock content %}
재정의 할 공간을 {% block (블록이름) %}{% endblock (블록이름) %}을 통해 베이스 HTML 파일에 지정
베이스 HTML을 사용할 다른 HTML 파일에서는 {% extends '(베이스 HTML 경로)' %}를 사용해서 가져옴
그 이후 재정의 공간과 같이 {% block (블록이름) %} 추가할 코드 작성 {% endblock (블록이름) %} 태그 내부에 코드를 독립적으로 작성
2-1. ‘extends’ tag
{% extends 'path' %}
자식(하위) 템플릿이 부모 템플릿을 확장(가져옴)한다는 것을 알림
반드시 템플릿의 최상단에 작성되어야 함
2개 이상 사용 불가능 함
2-2. ‘block’ tag
{% block name %}{% endblock name %}
하위 템플릿에서 재정의(overridden)할 수 있는 블록을 정의(하위 템플릿이 작성할 수 있는 공간 지정)
3. 요청과 응답 - form
3-1. 데이터 보내고 가져오기
HTML의 form 요소를 통해 사용자와 애플리케이션 간의 상호작용 하기
- ‘form’ element
사용자로부터 할당된 데이터를 서버로 전송
웹에서 사용자 정보를 입력하는 여러 방식(text, password 등)을 제공
- ‘action’ & ‘method’
form의 핵심 속성 2가지
데이터를 어디(action)로 어떤 방식(method)으로 보낼 지 지정
action
입력된 데이터가 전송될 URL을 지정(목적지)
속성을 지정하지 않으면, 현재 form이 있는 페이지의 URL로 보냄
method
데이터를 어떤 방식으로 보낼 것인지 정의
데이터의 HTTP request methods(GET, POST)를 지정
<!--form(action & method) 사용 예시--><formaction="#"method="GET"><div><lablefor="name">아이디 :</lable><inputtype="text"id="name"/></div><div><labelfor="password">패스워드 : </label><inputtype="password"name="password"id="password"/></div><inputtype="submit"value="로그인"/></form>
form 요소 사용 예시 결과
- ‘input’ element
사용자의 데이터를 입력 받을 수 있는 요소
type 속성 값에 따라 다양한 유형의 입력 데이터를 받음
input 요소의 type 종류
- ‘name’ 속성
input의 핵심 속성
데이터를 제출했을 경우, 서버는 name 속성에 설정된 값을 통해 사용자가 입력한 데이터에 접근 가능
Django 입력 제출 시, url의 구조
url의 물음표(?) 뒤에 name 속성에 입력 값을 담아 url로 전달하게 됨(Query String Parameters)