Django 02 - MTV Pattern, 템플릿 변수, Variable Routing
12 Feb 2019 | DjangoDjango 기본 Process (MTV Pattern)
1. urls.py - url 패턴 정의
- urlpatterns 라는 리스트안에 주소를 하나하나씩 쌓아 넣음.
- 첫번째 인자: URL 주소를 입력
- 두번째 인자: 해당 URL 주소로 요청이 들어올 때 views.py 내 연결할 함수를 입력함. 이 함수는 어플리케이션 폴더 내 views.py에 작성되어있으므로
import
해와야함 예)from pages import views
아래 코드에서 입력한 내용의 의미는 다음과 같다.
index/
라는 url로 요청이 들어온, 두번째 인자의 내용에 따라, views.py 내index
함수를 실행함. views.py이 함수를 통해 return 되는 값을 반환하는데, 그 결과 값은 index.html을 render 하는 것임
from django.contrib import admin
from django.urls import path
from pages import views
urlpatterns = [
path('index/', views.index),
path('admin/', admin.site.urls),
]
2. views.py - 함수 정의
- urls.py를 통해 정의된 urlpattern에 따라, 요청이 들어오면 어떤 것을 반환할건지에 대한 기본 로직을 작성하는 파일임. 함수로 정의되며, 함수의 인자로
request
를 받음 - 함수
render
첫번째 인자로request
를 넘겨주고, 어떠한 html 을 보여줄건지를 설정함. - return 으로 반환되는
render
함수의 첫 번째 인자request
는 위 index 함수의 첫번째 인자와 동일함.
from django.shortcuts import render
def index(request):
return render(request, 'index.html')
3. Template - 웹 페이지(html) 구현
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<h1>Index입니다!</h1>
</body>
</html>
Summary
- url.py에서 url의 pattern을 정의함. 사용자 또는 정해진 코드에 따라 특정 url이 요청되면, 정의된 url pattern에 따라 views.py내 특정 함수를 호출함.
- views.py 내에서 함수를 작성하여, 작성된 함수에 따라 return 값을 줌. 일반적으로는
render
&redirect
함수를 이요하여 특정 html을 호출거나 다른 웹페이지로 연결시킴. - render 된 html 파일을 열어서 사용자에게 보여줌
템플릿 변수
HTML 문서에 views.py 내 정의한 변수를 넘기는 것을 템플릿 변수라고 함.
예시로, 저녁 메뉴를 random으로 뽑혀서 보여주는 페이지를 생성해보자.
- urls.py
- 페이지를 접근하는 주소를 urls.py에 생성.
- “기본주소/dinner” 이라는 url 주소를 사용자가 호출(요청;request)하면 views 폴더 내 dinner 함수가 실행됨.
from django.contrib import admin
from django.urls import path
from pages import views
urlpatterns = [
path('dinner/', views.dinner),
path('admin/', admin.site.urls),
]
- view.py
random
함수를 쓰기 위해 함수를 import 해움random,.choice
의 결과 값을pick
이라는 변수에 저장하여,render
의 3번째 인자로 넘김- Django에서는 템플릿변수를 넘길때, 딕셔너리의 형태로 넘겨야함.
'dinner'
:Dict
의key
이며, 이 값이 html 문서로 넘김- 딕셔너리에서 key를 호출하면 value값이 반환되는 파이썬 문법의 매커니즘을 사용함.
from django.shortcuts import render
import random
def dinner(request):
menu = ["족발","햄버거","치킨","초밥"]
pick = random.choice(menu)
return render(request, 'dinner.html', {'dinner': pick})
- dinner.html
- 템플릿 변수를 html 파일에서 사용할 때는 반드시 이중 중괄호로 감싸줘야함.
- views.py에서 지정한
render
함수의 3번째 인자{'dinner': pick}
에서key
값인 dinner를 이중 중괄호안에 넣으면,dict
의value
값인pick
이 반환됨. pick
은random.choice
의 결과값이 저장된 변수임
<!-- 중략 -->
<body>
<h1>오늘 저녁은 </h1>
</body>
<!-- 변수는 반드시 이중 중괄호로 감싸 줄 것! 변수는 의 형태임 -->
Variable routing
URL 주소자체를 변수로 사용하는것을 의미함. URL 주소로 들어오는 값을 변수로 지정하여, views.py 내 함수의 인자로 넘겨줌. 변수값에 따라 다른 페이지를 연결 시킬 수 있음.
- urls.py
- 페이지를 접근하는 주소를 urls.py에 생성.
- 기본적으로
< >
의 형태로 variable routing을 정의함<str:name>
은 자료의 형태를 string(문자열)으로 제한한다는 의미임.<>
내 변수가 views.py 내 함수의 인자로 할당됨
- 예를들어,
기본주소/hello/harry
와 같은 예시의 주소를 요청하면,name
변수의 값으로 harry가 할당되며, 이 값을 views.py 및 render 되는 html 파일에서 사용 할 수 있게 됨.
urlpatterns = [
path('hello/<str:name>/', views.hello),
path('admin/', admin.site.urls),
]
- view.py
- variable routing으로 할당된 변수를 인자로 넘기고, 그 인자가 다시 템플릿 변수로 사용함.
- 여기서 템플릿 변수를 정의하는 render함수의 3번째 인자
{'name' : name}
를 유심히 살펴보자key
: html 파일에서 사용하는 변수 명value
: variable routing으로 들어오는, 제 주소창에 입력되는hello/<str:name>
의 name이다 (hello함수의 2번째 인자)
def hello(request, name):
return render(request, 'hello.html', {'name': name})
- hello.html
<body>
<h1>안녕, !</h1>
</body>
Comments