개발/파이썬
djangogirls | 7. 애플리케이션 확장
연별(YeonStar)
2020. 10. 31. 22:50
블로그 글의 페이지 만들기(Post)
- model : 이미 Post 모델이 있으므로 오케이!
- 템플릿1 : post 리스트에 링크 만들기
- {% url 'post_detail' pk=post.pk %}
- {% %}: 장고 템플릿 태그
- url : url 생성
- 'post_detail' : 뷰 경로 -> blog.views.post_detail : blog(앱)의 뷰(views)에서 post_tail 뷰를 지칭함
- pk=post.pk : pk가 Post 객체의 pk 필드의 값인 경우
- pk : 데이터베이스의 각 레코드를 식별하는 primary key 의 줄임말.
- 참고로, Post 모델에서 primary key를 추가하지 않았기 때문에 새로운 블로그 글 생성시 pk 필드에 1, 2, 3 등으로 증가됨
- {% url 'post_detail' pk=post.pk %}
#blog/templates/blog/post_list.html
{% extends 'blog/base.html' %}
{% block content %}
{% for post in posts %}
<div class="post">
<div class="date">
{{ post.published_date }}
</div>
<h1><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h1>
<p>{{ post.text|linebreaksbr }}</p>
</div>
{% endfor %}
{% endblock %}
- urls : blog/urls.py에 URL을 만들기
- post/<int:pk/>/ : URL 패턴
- post/ : URL이 post 문자를 포함해야 한다
- <int:pk> : 정수 값을 pk라는 변수로 뷰에 전송
- 예시> http://127.0.0.1:8000/post/5/의 입력 : 라고 입력하면, 장고가 매개변수 pk가 5인 값을 post_detail의 뷰(views.post_detail)에게 전달
#blog/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.post_list, name='post_list'),
path('post/<int:pk>/', views.post_detail, name='post_detail'),
]
- views : views.py에 post_detail 추가하기
- 매개변수 pk를 URL을 받으므로, pk를 식벽하기 위해서, 함수의 매개변수로 넣음
- get_object_or_404를 위한 함수를 넣어줌
#blog/views.py
아래 내용을 views에 추가함
from django.shortcuts import render, get_object_or_404
def post_detail(request, pk):
post = get_object_or_404(Post, pk=pk)
return render(request, 'blog/post_detail.html', {'post': post})
- 템플릿2: post_detail(상세 페이지) 만들기
- 템플릿 폴더에 post_detail.html을 생성
- {% if ... %} ... {% endif %} : post의 게시일(published_date)이 있는지, 없는지를 확인
#blog/templates/blog/post_detail.html
{% extends 'blog/base.html' %}
{% block content %}
<div class="post">
{% if post.published_date %}
<div class="date">
{{ post.published_date }}
</div>
{% endif %}
<h1>{{ post.title }}</h1>
<p>{{ post.text|linebreaksbr }}</p>
</div>
{% endblock %}