이전에 views.py 파일에 작성했던 write_world 는 지우거나 주석처리하시고 class Post를 활용하여 새로운 함수 post_example 을 생성합니다.(아래의 views.py 파일 코드는 단계별 예시로 글을 읽다보면 다시 대폭 수정되었을 것입니다.)
import datetime
from django.shortcuts import render, HttpResponse
from .models import Post
# Create your views here.
def post_example(request):
post_example = Post.objects.all()
output = '<br/>'.join([a.title for a in post_example])
return HttpResponse(output)
"""
def write_world(request):
now_time = str(datetime.datetime.now())
name = request.GET.get('name')
if not name:
name = 'Guests'
return HttpResponse(
"<h1> Hi, django world {}</h1>".format(name)
+ '<br/><br/>'
+ now_time
)
"""
python manage.py shell
>>> from myapp.models import *
>>> Post
>>> Post.objects.create(title='오늘 하루도 시작', content='열심히 코딩해봅시다')
>>> Post.objects.count() # 포스트 갯수 출력
myapp 폴더 안에 templates 라는 새로운 디렉토리를 생성하고 templates 안에 index.html 파일을 생성해줍니다. 그 전에 잠깐 장고의 문법을 간단하게 살펴봅시다.
{% if 조건문 %}
{% else %}
{% endif %} # django에선 if 문이 끝났다는 것을 표시해주어야 합니다.
{% for el in iterable %}
{% endfor %}
아래는 index.html 예시입니다. 내용은 자유롭게 바꾸시기 바랍니다.
<h1> 장고 블로그 꾸미기 </h1>
{% if post_list %}
<ul>
{% for post in post_example %}
<li>{{ post.title }}</li> # 참조를 할 때는 중괄호 2개 필요 {{ }}
{% endfor %}
</ul>
{% else %}
<h2> 아직 포스팅이 없습니다. </h2>
{% endif %}
이후 views.py 파일을 아래와 같이 수정합니다. 댓글을 확인하기 위한 post_comment 함수를 추가해주었습니다.
import datetime
from django.shortcuts import render, HttpResponse
from .models import Post
# Create your views here.
def post_example(request):
post_example = Post.objects.all()
context = {'post_list': post_example} # context 딕셔너리 사용
# 딕셔너리 key값인 'post_list'가 index.html로 넘겨지는 것
return render(request, 'index.html', context)
def post_comment(request, post_id):
post = Post.objects.get(id=post_id)
comments = post.comment_set.all()
context = {
'post': post,
'comments': comments
}
return render(request, 'post.html', context)
templates 안에 post.html 이란 파일을 생성하고 아래와 같이 입력합니다.
<h1>{{ post.title }}</h1>
<p>{{ post.create_date }} / {{ post.modify_date }}</p>
<div>
{{ post.content }}
</div>
<div>
<ul>
{% for comment in comments %}
<li>
{{ comment.text }} {{ comment.create_date }}
</li>
{% endfor %}
</ul>
</div>
다음으로 myapp 폴더 안에 있는 urls.py 파일을 클릭하여 views.py 내의 함수들을 불러옵니다.
urlpatterns = [
path("", views.post_example),
path("<int:post_id>/", views.post_comment) # 가변적인 변수를 받겠다는 의미
]
이렇게 다 세팅하고 나서 python manage.py shell 을 통해 파이썬 환경에 진입 후 원하는 title, content, comment 내용을 작성해주면 되겠죠? 마지막으로 index.html 파일에서 추가 옵션이 있는데요. 방금 작성했던 코드에 하이퍼링크를 설정하는 것으로 아래처럼 작성해주면 됩니다.
<ul>
{% for post in post_list %}
<li>
<a href="{% url 'detail' post.id %}">
{{ post.title }} </a>
</li>
{% endfor %}
</ul>
여기서 'detail'은 myapp 폴더의 urls.py 파일에서 설정할 수 있습니다. name="detail" 만 간단하게 추가해주면 됩니다. 주목할 점은 url 주소가 <int:post_id> 라고 설정된 것입니다. 댓글을 보려면 특정 포스트가 있어야 하고, 각 포스트는 저마다 id를 가지고 있겠죠. 따라서 이전에 설정한 foreignkey 특성상 post_id 형식을 사용하여 url에 매칭한 것입니다.
urlpatterns = [
path("", views.post_list),
path("<int:post_id>/", views.post_detail, name="detail")
]
이렇게 세팅을 모두 완료하고 나면 아래와 같은 웹 페이지를 볼 수 있을 것입니다.
'문돌이 존버 > Django 스터디' 카테고리의 다른 글
Mac 버전 장고 탬플릿 및 Bootstrap 세팅 (0) | 2020.06.21 |
---|---|
Mac 버전 장고 웹페이지 http request (1) | 2020.06.20 |
Mac 버전 장고 데이터베이스 관리 2탄 (0) | 2020.06.20 |
Mac 버전 장고 데이터베이스 관리 1탄 (0) | 2020.06.19 |
Mac 버전 장고(Django) 웹서버 기본 세팅 (0) | 2020.06.19 |