Django

[Django] #7 장고 Template 시작하기

kinggoddino 2024. 8. 13.

1. 요청request이 들어오면

2. URL(urls.py) 처리

3. View(views.py) 처리

4. Template(html) 처리

5. 응답(Response) 전달

 

urlpatterns

 

path(a, b)

a로 들어오면 b로 연결해줄거야. 라는 뜻.

 

슬래시 안써도 되지만 장고에서는 슬래시 쓰는걸 권장함.

 

 

 

view

 

view를 작성하는 방법은 2가지가 있음

1. 함수형 뷰로 작성하는 방법

2. 클래스형 뷰로 작성하는 방법

 

클래스형 뷰는 상속같은거 할 수 있으니깐 함수형뷰보다 코드를 좀 줄일 수 있겠지?!

뭐가 좋고 나쁜건 없음. 그냥 선택하는 것임.

장고쓸때는 함수를 권장함? 왜냐면 흐름이 다 눈에 보이니깐.

 

def index(request):
    pass

resquest 부분은 장고가 알아서 요청을 넣어준다.

이렇게 함수형 view를 만들어 준 후에

 

from django.contrib import admin
from django.urls import path

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

원래꺼

from django.contrib import admin
from django.urls import path
from articles import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', views.index),
]

articles 파일에 있는 views 모듈을 가져온 다음,

그 안에 있는 index 함수로 연결해. 라는 경로 설정

(끝날때마다 콤마 해주는 습관)

 

 

view 파일

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

# Create your views here.
def index(request):
    response = HttpResponse("<hi>Hello, Django!</hi>")
    return response

index 함수의 역할 : response 만들어주기.

httpresonse 는 장고에 들어있음. import 해준다음에 그냥 설정함.

찾아보면서 해야되는거다ㅠ

 

() 안에는 응답해주고 싶은 것을 문자열로 적으면 됨.

 

 

 

그리고 다시 runserver 해서 파일 들어가보면

Not Found : /

너 지금 슬래시경로로 들어왔는데(==아무것도없는경로), 아무것도 찾을 수가 없어..(==Not found)

 

 

index 경로로 들어가주면

 

index 실행 완료!

 

 

 

 

 

 

 


 

articles 폴더 안에 templates 폴더 만들기

templates 폴더 안에 index.html 파일 만들기

 

index.html 파일에서 작업.

! 누르고 Tab 누르면 기본틀 구조 자동완성 됨.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>Hello, Kinggoddino!</h1>        # 추가했음
    <div>Spinosaurus is so cute</div>   # 추가했음
</body>
</html>

 

view 파일

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

 

작동 순서

1) Url 들어가서 패턴을 봄. admin ? 일치 안함. index? 일치함.

2) view 파일에 있는 index 함수가 실행됨.

3) index.html을 가져와서 rendering을 거쳐서 해당 html 파일을 return 함.

 

서버를 실행해서 확인해보자

python manage.py runserver

실행된다!!

 

 

 

왜 난 index.html 만 적었는데 알아서 articles의 templates의 index.html 파일을 찾아서 보여주는 거지..?

 

비밀은 setting.py에 있다

settings를 보면

templates 에 대한 설정이 있다.

app_dirs(directory) : true?

template 파일이 app(articles) 안에 있다는 뜻이다. 사회적 약속임. 그래서 templates 파일 만들 대 오타내면 안댐.

 

 

컨트롤 누른 상태에서 render 함수를 클릭해보면 

render 함수를 뜯어볼 수 있음

HttpResponse 를 리턴한다구 함.

걔의 컨텐츠는 django.template.어쩌구의 결과로 httpresponse 가 채워진다 어쩌구.

어쨌든 render 함수쓰고, 첫번째 자리에 request 넘기고, 두번째자리에 내가 원하는 템플릿 이름 적으면 된다는 뜻.

render(request, template_name, context)

 

 

 

흐름 : HttpRequest -> URLs -> View-> Template -> View -> HttpRequest

 

 


 

 

users/로 들어오면 users.html 실행되는 코드 만들기

 

1. my_first_pjt 폴더의 urls.py 파일에서 경로 추가

    path('users/', views.users),

 

2. articles의 views.py 파일에서 함수 추가

def users(request):
    return render(request, 'users.html')

 

 

3. articles폴더의 templates 폴더에 users.html 파일 생성 후 내용 추가

 

성공


 

'Django' 카테고리의 다른 글

[Django] #9 HTTP Form  (0) 2024.08.15
[Django] #8 장고 Template System  (0) 2024.08.14
[Django] #6 장고 설계 철학 MTV pattern  (0) 2024.08.13
[Django] #5 요청과 응답  (0) 2024.08.12
[Django] #4 클라이언트와 서버  (0) 2024.08.12