티스토리 뷰

Django

Django #3 Template 사용하기

joyHong 2022. 3. 15. 23:31

Template을 생성하여 결과 보내기

 

이번 글에서는 Template 을 통해 HTML 을 렌더링하여 요청 결과를 보내주도록 하려고 한다.

먼저 v2 라는 새로운 애플리케이션을 생성한다.

콘솔에서 python manage.py startapp v2 를 입력 후 실행하면 아래의 그림과 같이 v2 애플리케이션이 생성된다.

 

애플리케이션을 생성할 때마다 settings.py의  INSTALLED_APPS에 애플리케이션명을 추가해 주는 것과 프로젝트 urls.py의 urlpatterns에도 애플리케이션 path를 추가하는 것도 잊지 말고 해야 한다.

 

시작에 앞서 한가지 설정을 먼저 하고 넘어가려고 한다.

html 파일들 경우 애플리케이션을 생성할 때마다  해당 애플리케이션 경로에 생성하지 않고 프로젝트 한 곳에 모아 놓고 관리를 하기 위해 templates 이라는 폴더를 만들고 장고가 그 경로를 인식하도록 설정을 하려고 한다.

Joy 패키지 하위의 settings.py에서 이를 수정하는데 먼저 템플릿 경로 TEMPLATE_DIR 를 생성하고,

TEMPLATES 안의 DIRS에 TEMPLATE_DIR 를 추가한다.

import os

# 템플릿 경로 
TEMPLATE_DIR = os.path.join(BASE_DIR, 'templates')

위와 같이 settings.py에 추가를 하였으면 TEMPLATES 를 찾아 아래와 같이  DIRS 를 추가한다.

settings.py의 설정을 마쳤으면 프로젝트 뷰 영역으로 돌아가 최상위 프로젝트 아래에 templates 이라는 폴더를 생성한다.

이제 각 애플리케이션에서 사용하는 HTML 파일들은 이 templates 폴더 하위에 애플리케이션별로 서브 폴더를 만들고 그곳에 저장을 할 것이다.

지금의 예시에서는 v2 라는 폴더를 만들고 index.html을 생성하도록 하겠다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Django Tutorial v2</title>
</head>
<body>
<h2>Hello</h2>
May the force be With you!
</body>
</html>

우선 간단한 index.html 파일을 생성하였다.

이제 v2 패키지 아래의 urls.py에 urlpatterns을 생성해야 한다. 그러나 애플리케이션만 v2로 생성하고 다른 작업은 하지 않았기 때문에 당연히 urls.py 파일이 없을 것이다. 그러니 먼저 v2 패키지 아래에 urls.py 파일을 생성하고 v1 애플리케이션을 생성할 때 만들었던 urls.py와 같이 생성하면 된다.

from django.urls import path
from .views import *

app_name = 'v2'
urlpatterns = [
    path('', index, name='index'),
]

애플리케이션은 v2 이기 때문에 app_name은 v2로 하였고 ~/v2 로 요청이 왔을 때 index 라는 view가 처리를 하도록 할 것이다.

여기까지 생성이 되었으면 v2의 view.py로 가서 index 가 해야 할 일을 만들어 주도록 하자.

index라는 뷰가 해야할 일은 templates/v2에 만들어 두었던 index.html을 렌더링하여 응답결과로 보내는 것이다.

from django.shortcuts import render


def index(request):
    return render(request, 'v2/index.html')

 

view가 생성이 되었다면  runserver를 하고 http://127.0.0.1:8000/v2 로 들어가보면 아래의 그림과 같은 결과가 나오게 된다.

 

그럼 다음으로 ~/v2/name  으로 요청이 왔을 때 임의의 값을 template로 보내고 템플릿언어를 사용하여 결과를 만들어 보도록 한다.

그러기 위해서는 urls.py, views.py를 수정하고 name.html 이라는 파일을 생성하도록 한다.

views.py에 name 이라는 함수형 뷰를 생성하였고, 요청이 들어오면 v2/name.html 을 렌더링 하는데 이 때 마지막에 넘겨주는 값을 html 내부에 적용하여 처리하도록 하였다.

다음으로는 html 파일을 추가한다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Django Tutorial v2</title>
</head>
<body>
<h2>Hello {{name}}</h2>
May the force be With you!
</body>
</html>

name.html 파일은 index.html 을 복사하여 붙인 후 Hello 뒤에  {{name}} 만 추가하였다.

{{ }} 은 템플릿 언어로 변수를 사용할 때 쓴다.

템플릿 언어에 대한 자세한 내용은 공식 문서를 참조하면 좋을 것 같다.

 

그럼 이번에는 view에서 미리 정의한 내용이 아니라 url에 입력한 값을 html에 그대로 전달하여 나오도록 해보려고 한다.

이를 위해서는 URLconf 기능을 이용하면 된다.

app_name = 'v2'
urlpatterns = [
    path('', index, name='index'),
    path('name', name, name='name'),
    path('name/<str:keyword>', username, name='username'),
]

~/v2/name 으로 요청이 들어오면 view에서 정의한 값이 html로 보내졌는데

만약 url이  ~/v2/name/xx 과 같은 패턴인 경우에는 username 이라는 뷰에서 처리를 하도록 한 것이다.

그리고 username 이라는 뷰의 인자값으로 keyword를 전달하는 기능을 하게 된다.

views.py로 돌아가 아래와 같이 추가하도록 한다.

def username(request, keyword):
    return render(request, 'v2/name.html', {'name':keyword})

username 이라는 뷰가 keyword를 인자로 받아서 그 값을 name.html 에 적용하여 렌더링 후 결과로 전달하게 된다.

 

이 글에서 생성한 코드는

https://github.com/joyhong85/Tutorial

에서 보실 수 있습니다.

'Django' 카테고리의 다른 글

Django #6 장고의 Form  (0) 2022.03.20
Django #5 장고의 Views  (0) 2022.03.15
Django #4 홈페이지 만들기 feat.부트스트랩  (0) 2022.03.15
Django #2 간단한 웹페이지 만들기  (0) 2022.03.15
Django #1 시작하기  (0) 2022.03.15
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함