❗ 이제 url 링크에 해당하는 웹 페이지를 만들어보자
웹 페이지 구조를 어떻게 할 거냐면... 아래처럼 구성한다고 생각해보자
url -> 앱 -> view
---------
/, /login 등 -> core, /에서는 room의 view를 보여줄 거임
/room -> room
/user -> user
먼저 어떤 화면을 보여줄 지는 views.py에서 정의하면 됨
from django.shortcuts import render
def all_rooms(request):
pass
그 다음 views.py를 앱 router에 들어왔을 때 url이 찾을 수 있도록 연결하는데
urls.py는 앱에 기본적으로 없어서 만들어 줘야 함.
""는 / 를 의미함. path에서 url을 지정할 때 앞에 /를 안붙여도 되는 듯.
여기서 /는 core router의 root 화면이라는 의미.
# core/urls.py
from rooms import views as room_views
app_name = "core"
urlpatterns = [path("", room_views.all_rooms, name="home")]
앱의 router는 config/urls.py에 추가해주면 된다
namespace를 지정해주려면 core/urls.py에 app_name을 지정해줘야 함
from django.urls import path, include
urlpatterns = [
path("", include("core.urls", namespace="core")),
path("admin/", admin.site.urls),
]
docs.djangoproject.com/en/3.1/ref/urls/
docs.djangoproject.com/en/3.1/ref/urls/#django.urls.include
all_rooms에 아무것도 하지 않으면 HttpResponse를 return하지 않는다고 에러가 뜬다
The view rooms.views.all_rooms didn't return an HttpResponse object. It returned None instead.
❗ allrooms(request) 에서 request는 어떤 값을 갖고 있을까?
vars()와 dirs()로 변수와 메소드를 한번 살펴보면 된다
print(vars(request))
print(dirs(request))
HttpRequest를 만들어도 되지만 이미 있는 템플릿을 불러오는게 더 편함
def all_rooms(request):
return HttpResponse(content="hello")
docs.djangoproject.com/en/3.1/ref/request-response/#django.http.HttpResponse
render : docs.djangoproject.com/en/3.1/ref/forms/renderers/
HttpRequest에 html 문서를 넣어서 보내는 게 더 생산적임!
❗ html 파일을 Django가 인식하도록 설정해보자
request가 오면 all_rooms.html을 보여주도록 render 설정을 해주고
def all_rooms(request):
return render(request, "all_rooms.html")
이렇게 all_rooms.html 파일을 만든다
templates/
└── all_rooms.html
Django가 templates/all_rooms.html을 인식하도록 settings.py를 수정한다
TEMPLATES = [
{
"DIRS": [os.path.join(BASE_DIR, "templates")],
❗ html 파일을 만들어보자!
jinja를 사용해서 편하게 html 문서를 만들 수 있음
템플릿이 될 html에 block을 만들어준다
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
<title> {% block page_name %}{% endblock %} | Nbnb</title>
</head>
<body>
{% block content %}{% endblock %}
© YN0011
</body>
</html>
템플릿 html을 가져올 땐 extends를 사용하고
block은 템플릿에 쓴 것 그대로 가져옴
{% extends 'base.html' %}
{% block page_name %}
Home
{% endblock %}
{% block content %}
{% for room in rooms %}
<h1>{{room.name}} / ${{room.price}}</h1>
{% endfor %}
{% endblock content %}
'개발 > AWS' 카테고리의 다른 글
AWS에 vscode 서버 만들기 (0) | 2021.03.16 |
---|---|
Django 앱 만들기 - 모델 테스트 데이터를 자동으로 만들기 (0) | 2021.02.02 |
Django 앱 만들기 - model의 save와 admin의 save_model을 오버라이딩 하기 (0) | 2021.02.02 |
Django 앱 만들기 - Models method, upload image (0) | 2021.01.21 |
Django 앱 만들기 - admin 패널 꾸미기, QuerySet, UserManager (0) | 2021.01.21 |
댓글