이번 포스팅에서는 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/
https://docs.djangoproject.com/en/2.2/
모든 소스는 아래의 Github에 있습니다 :)
https://github.com/paullee714/BlogCode/tree/master/Django/3_8.Django_tweetme_Template_MoreUsage
'Old Branch' 카테고리의 다른 글
[tip] Django 디버깅하기 - django-debug-toolbar (0) | 2019.10.25 |
---|---|
Django - tweetme 소셜서비스 구현해보기 (10) - Class based View (0) | 2019.10.24 |
Django - tweetme 소셜서비스 구현해보기 (8) - Querying database & 콘솔, 웹에서 출력하기 (0) | 2019.10.22 |
[React-Native] React-Native 입문기 - ES6(2) 객체비구조화 (0) | 2019.10.21 |
Django - tweetme 소셜서비스 구현해보기 (7) - CRUD & First View 작성 (0) | 2019.10.20 |