노마드코더의 강의를 듣고 중요한 내용을 정리하였습니다.
장고 템플릿이란?
템플릿이란 서로 다른 정보를 일정한 형태로 표시하기 위해 재사용 가능한 파일을 말한다. 장고 템플릿은 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 |
댓글