본문 바로가기
Web developer/Django

[Django] 장고 템플릿 #1

by doongjun 2020. 11. 13.

노마드코더의 강의를 듣고 중요한 내용을 정리하였습니다.


장고 템플릿이란?

템플릿이란 서로 다른 정보를 일정한 형태로 표시하기 위해 재사용 가능한 파일을 말한다. 장고 템플릿은 html을 사용한다.

 

Django-seed 기능을 이용해 각각 app들의 모델에 각 필드에 맞는 데이터들을 넣어주었는데 이에 대한 내용은 다음에 다루도록 하겠다.

 

rooms/models.py의 Room모델에 저장되어있는 값들을 불러와 방이름과 방가격을 장고템플릿을 통해 웹에 띄워보고자 한다. 장고 템플릿을 사용하기 위해 rooms/views.py에서 아래와 같이 작성한다.

from datetime import datetime
from django.shortcuts import render
from . import models


def all_rooms(request):
    all_rooms = models.Room.objects.all()
    return render(
        request,
        "rooms/home.html",
        context={"rooms": all_rooms},
    )

render를 import해주고 아래 all_rooms함수를 보면 request를 받아 all_rooms변수에 Room모델의 모든 값들을 저장하고render객체를 리턴한다. 

 

render함수는 아래와 같이 확인할 수 있는데, 첫번째 파라미터로 request를 두번째 파라미터로 템플릿을 받아들인다. 위에서 템플릿은 "rooms/home.html"로 지정되어 있는데 이는 templates/rooms/hoom.html을 가리키게 된다. 세번째 파라미터는 Optional인데, View에서 context={}를 통해 템플릿에 데이터를 Dictionary로 전달한다. 딕셔너리의 key는 템플릿에서 사용할 변수명이고 Value는 전달하는 데이터의 내용을 담는다. 위에서는 rooms라는 키로 Room모델의 모든 값들을 전달하고 있다.

def render(request: HttpRequest, template_name: Union[str, Sequence[str]], context: Optional[Mapping[str, Any]]=..., content_type: Optional[str]=..., status: Optional[int]=..., using: Optional[str]=...)
Return a HttpResponse whose content is filled with the result of calling django.template.loader.render_to_string() with the passed arguments.

View를 사용하기 위해서는 config/urls.py의 urlpatterns에 경로를 등록해줘야하는데 필자는 core/urls.py 경로를 추가하여 core의 urlpatterns에 추가해주었다.

config/urls.py

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path("", include("core.urls", namespace="core")),
    path("admin/", admin.site.urls),
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

core/urls.py

from django.urls import path
from rooms import views as room_views

app_name = "core"

urlpatterns = [path("", room_views.all_rooms, name="home")]

여기서 주의해야 할 점은 rooms/views.py의 all_rooms함수의 이름이 core/urls.py에서 잘 정의되었는지 확인해줘야한다.

이제 템플릿파일을 만들어 주어야 한다.

 

다음 포스팅에서 계속...

'Web developer > Django' 카테고리의 다른 글

[Django] 함수 기반 뷰 vs. 클래스 기반 뷰 #ListView  (0) 2020.11.14
[Django] 장고 템플릿 #2  (0) 2020.11.13
[Django] 쿼리셋(Query sets)  (0) 2020.11.09
[Django] ORM #2  (0) 2020.11.09
[Django] 모델 상속  (0) 2020.11.06

댓글