반응형

참고

https://tutorial.djangogirls.org/ko/dynamic_data_in_templates/



기존 MVC모델

M(Model) : 모델은 데이터베이스

V(View) :   뷰는 데이터를 기반으로 사용자들이 볼 수 있는 화면(html)

C(Controller) : 데이터와 사용자인터페이스 요소들을 잇는 다리역할


Django의 MTV모델

M(Model) : 모델은 데이터베이스

T(Templates) : 템플릿은 데이터를 기반으로 사용자들이 볼 수 있는 화면(html)

V(View) : 뷰는 모델과 템플릿을 연결하는 역할


기존 MVC 모델과는 용어가 조금다릅니다. 기존 MVC모델의 View가 Django MTV모델의 Templates에 해당되고 Controller는 View에 해당합니다. 정확히 같은 개념은 아니겠지만 (Django는 Cotroller의 역할을 Django Framework 자체에서 한다고 보고 있지만) 거의 동일하다고 보고 있습니다.



여기는 간단하게 요약해 놓았습니다. 조금 더 자세히 알아보고 넘어가도 좋습니다.

구글 검색하면 많은 자료를 접할수 있습니다.

처음 접한 개념이라면 쉽게 이해하기는 어려울거 같습니다. 만들다보면 왜 이런구조가 필요한지 이해할 수 있습니다.



어쨋든 이번에는 MTV에 View를 만들것입니다.

앞서 만든 models을 templates로 불러와 보여줄 것입니다.


 뷰(html)에 모델을 가져오기


blog/views.py 에 추가

1
2

from .models import Post
cs


앞서 사용해 봤던 쿼리를 통해 필요한 내용을 데이터를 받아온 뒤 'posts'라는 이름으로 데이터를 넘겨줍니다.


blog/views.py에 추가


1
2
3
4
5
6
7
from django.shortcuts import render
from .models import Post
 
def post_list(request):
    posts = Post.objects.filter(title__contains='title').order_by('-created_date')
    return render(request, 'blog/post_list.html', {'posts': posts})
 

cs


posts로 데이터를 받아와 저장한후 'posts'라는 이름으로 데이터를 템플릿에 넘겨줍니다.



이제 넘겨준 'posts'데이터를 template에서 활용하는 방법을 알아보겠습니다.


장고는 내장된 템플릿 태그라는 유용한 기능을 제공합니다.

이 기능을 이용하여 html에서 데이터를 받아 출력해 보겠습니다.



html에서 데이터를 받아 출력


blog/templates/blog/post_list.html 수정

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <p>{{ posts }}</p>
    </body>
</html>
cs

위 수정으로 데이터들이 배열에 담겨서 출력되는것을 알 수 있습니다.



blog/templates/blog/post_list.html 수정

1
2
3
{% for post in posts %}
    {{ post }}
{% endfor %}
cs


이런식으로 for문을 사용해 출력할 수 있다.


조금 보기좋게 만들어 보자


blog/templates/blog/post_list.html 수정

1
2
3
4
5
6
7
8
9
10
11
12
<div>
    <h1><a href="/">StrawberryFarms</a></h1>
</div>
 
{% for post in posts %}
    <div>
        <p>published: {{ post.published_date }}</p>
        <h1><a href="">{{ post.title }}</a></h1>
        <p>{{ post.text|linebreaksbr }}</p>
    </div>
{% endfor %}
 

cs


아직 우리가 평소에 보는 모습은 아니지만 css파일을 설정하면 조금 예쁘게 꾸며줄수 있다.



반응형

'웹개발 > Django' 카테고리의 다른 글

Django 다른페이지 추가해보기 #8  (0) 2020.12.13
Django 웹디자인(CSS) #7  (0) 2020.12.13
Django ORM 쿼리셋 #5  (0) 2020.12.13
Django urls #4  (0) 2020.12.13
Django 배포해보기 #3  (0) 2020.12.12
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기