반응형

 

Django - 장고 웹 화면 보여주기 (view와 template 연결)

 

 

   목차

  1. template이란?
  2. view와 templates 연결하여 웹 화면 보여주기

 

 

1. template이란?

 

template은 웹페이지에 나타낼 화면을 정의하는 것으로, html 문서 안에 탬플릿 태그를 통해 반복문이나 조건문을 사용할 수 있어 동적인 웹페이지를 작성할 수 있습니다.

 

 

2. template 태그

 

template 태그에는 html 문서 안에서 객체 출력, 반복문, 조건문을 사용할 수 있게 해주는 태그들이 있습니다. 

  1. 변수출력 : {{ 변수명  }}
  2. 조건문 : {% if 조건문 %} ... {% elif 조건문 %} ... {% else %} ...
  3. 반복문 : {% for 변수 in  iterable객체 %} ... {% endfor %} 
    • forloop.counter : for문의 순서로 1부터 표시합니다.
    • forloop.counter0 : for문의 순서로 0부터 표시합니다.
    • forloop.first : for문의 첫번째인 경우. true 반환
    • forloop.last : for문의 마지막인 경우 true 반환

 

 

2. view와 templates 연결하여 웹 화면 보여주기

 

1) templates 폴더 생성 

 

프로젝트 폴더 바로 아래 html 템플릿 문서를 저장할 templates 폴더를 만들어 줍니다. 그리고 앱이 여러개일 경우 앱별 html 문서를 따로 관리하기 위해 templates 폴더 안에 testapp 이름으로 서브 폴더를 추가로 만들어 주도록 하겠습니다.

 

 

2) templates 폴더 경로 설정

 

setting.py 파일의 TEMPLATES= [ ] 안에 아래와 같이 templates 폴더 경로를 지정해 줍니다. 

 

TEMPLATES = [
    {   ...
        "DIRS": [BASE_DIR / 'templates'],
        ...    },  ]

 

 

 

3)  templates > testapp > show2.html 문서 작성

 

show2.html 파일을 templates > testapp 폴더 안에 생성하였습니다. 

html 문서 내용은 외부 데이터베이스의 값을 받아와서 단순히 화면에 보여주도록 하겠습니다. 

<!DOCTYPE html>
<html lang="en">
<head> ... </head>
<body>
    <h1>Show2</h1><hr>
    {% for item in data %}
        <h3>ID:{{item.id}}, NAME:{{item.name}}, AGE:{{item.age}}</h3>
    {% endfor %}
</body>
</html>

 

 

4) testapp > views.py 문서 작성

from django.shortcuts import render
from django.http import HttpResponse
from .models import TestTb

def show1(request):
    testtb = TestTb.objects.all()
    return render (request, 'show1.html', {'data':testtb})

def show2(request):
    testtb = TestTb.objects.all()
    return render (request, 'testapp/show2.html', {'data':testtb})

 

 

5) config > urls.py 문서 작성

from django.contrib import admin
from django.urls import path, include
from testapp import views

urlpatterns = [
    path("admin/", admin.site.urls),

    path("show1", views.show1),
    path("show2", views.show2),
]

 

 

[실행결과]

 

반응형

+ Recent posts