Old Branch

Django - tweetme 소셜서비스 구현해보기 (9) - View function과 Templates에서의 응용

woolbro 2019. 10. 23. 01:10
반응형

이번 포스팅에서는 Template을 다루는 기본에 대해서 얘기 해 보려고 합니다.

 

간단한 기능을 추가해서 많은 데이터를 보여 줄 수 있는 기능을 소개하려고 해요. 짧지만 유용한 포스팅이 되었으면 좋겠습니다.

 

이번 포스팅의 소스코드는 Github에 업로드 해 놓았습니다

 


이전 포스팅들에서는 데이터베이스에 들어있는 데이터를 가져오고, 가져온 데이터를 template에 뿌려주는 역할까지 작성 해 보았습니다.

 

대표적으로 작성했던 tweets앱의 views.py의 함수들이 있습니다.

 

같이 한번 더 보면서 응용 해 보도록 하겠습니다.

1. Views.py

from django.shortcuts import render

from .models import Tweet
# Create your views here.

def tweet_detail_view(request, id=1):
    obj = Tweet.objects.get(id=id) #GET from database
    print(obj)
    context ={
        "object" :obj
    }
    return render(request, "tweets/detail_view.html",context)

def tweet_list_view(request):
    queryset = Tweet.objects.all()
    print(queryset)
    for obj in queryset:
        print(obj.content)
    context = {
        "object_list" : queryset
    }
    return render(request, "tweets/list_view.html",context)

위의 소스코드는 지난 포스팅에서 작성을 완료했던 tweets App의 views.py 함수들입니다.

def tweet_detail_view(request, id=1) 함수는 obj 변수에 Tweet.object 1개를 가져와 담아주었고

"object"라는 변수에 담아 detail_view.html로 보내주었습니다.

 

이 때, 함수에서 쿼리문으로 가져온 데이터를 템플릿으로 보내주는 역할을 하는 것은 대표적으로 render가 됩니다!

 

2. detail_view.html

REVIEW 1에서 보았던 render 함수를 통해서 html(template)에 편하게 데이터를 출력 할 수 있었습니다.

 

아래의 코드는 이전포스팅에서 작성했던 detail_veiw.html 에 데이터베이스 이름들을 추가 해서 출력 해 주는 코드들을 추가 한 것입니다.

코드의 결과는 아래의 그림고 같습니다.

<h1>detail_view.html</h1>
{{ object.content}}</br> <!-- object의 content -->
{{ object.user}}</br><!--object의 user-->
{{ object.timestamp}}</br><!--object의 timestamp-->
{{ object.timestamp|timesince}}</br><!--object의 timestamp로부터 지난 시간-->

 

3. list_view.html

list_view.html 은 object_list에 모든 쿼리 데이터들이 담겨있었습니다.

<h1>list_view.html</h1>
{{ object_list}}

함수 tweet_list_view에서 object_list에 모든데이터를 담아주었었는데요,

이렇게 주면 출력 할 때에 아래와 같이 한번에 모두 출력이 되었었습니다.

 

위의 html코드에 반복문을 사용해서 object를 하나씩 출력 해 주도록 하겠습니다.

<h1>list_view.html</h1>
{% for obj in object_list %}
    <h2>{{ obj.content}}</h2><!-- object의 content -->
    {{ obj.user}}</br><!--object의 user-->
    {{ obj.timestamp}}</br><!--object의 timestamp-->
    {{ obj.timestamp|timesince}}</br><!--object의 timestamp로부터 지난 시간-->
    <hr>
{% endfor%}

위의 코드를 간단히 설명하면,

for obj in object_list  --> for문(반복문)을 사용해서 object_list하나의 값을 obj에 담겠다

라는 얘기입니다.

 

간단한 for문 하나로 위의 QuerySet 결과는 아래와 같이 출력됩니다.

 

 

간단하죠~?

 

자주 사용 할 수 있는 기능들이고, 이번 tweetme 어플리케이션에서 중요한 기능들이라서 추가 해 놓았습니다.

본 포스팅에 있는 기능 이외의 다른 기능들은 django documentation에 소개되어있습니다!!

한번 확인 해 보세요 :)

 

https://docs.djangoproject.com/en/1.10/

 

Django documentation | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

https://docs.djangoproject.com/en/2.2/

 

Django documentation | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com


 

 

모든 소스는 아래의 Github에 있습니다 :)

https://github.com/paullee714/BlogCode/tree/master/Django/3_8.Django_tweetme_Template_MoreUsage

 

paullee714/BlogCode

BlogCode. Contribute to paullee714/BlogCode development by creating an account on GitHub.

github.com