주절주절 서론
이번 포스팅에서는 앞서 만든 오브젝트, 모델. 즉, 데이터를 저희가 직접 볼 수 있도록 뷰와 템플릿을 제작하려고 합니다!
해당 포스팅은 https://docs.djangoproject.com/en/5.1/intro/tutorial03/ 를 베이스로 실습을 진행합니다!!
간단하게 앞서 만든 Question의 리스트를 나열하는 페이지와 Question을 선택하여 선택한 Question이 갖고 있는 Choice에 투표하는 페이지까지 만들 예정이니 위의 링크와 포스팅을 읽으시면서 따라오실 수 있을 거에요!
이번 포스팅은 간략하게 설명한 감이 있으니, 코드에 이해가 가지 않는 부분이 있으시다면, Chatgpt에 질문을 하시거나, 댓글을 달아주시면 빠르게 답변 달도록 하겠습니다!
1. View?
뷰에 대한 설명은 뷰 설명
해당 링크에서 확인하실 수 있습니다!
2. Template?
템플릿은 HTML 파일로, 사용자가 볼 수 있는 웹 페이지의 모양, 구조를 정의합니다!
단순히 정적인 값을 띄우는 것이 아닌, 동적으로 데이터를 표시할 수 있으며, Django에서 제공하는 템플릿 엔진을 통해 변수를 출력하거나 조건, 반복 문의 사용이 가능합니다!
3. 실습
3-1. polls/views.py
from django.shortcuts import render
from .models import Question
# 최근 5개의 질문 리스트에 대한 뷰!
def index(request):
# 최근 5개의 질문!
latest_question_list = Question.objects.order_by("-pub_date")[:5]
context = {"latest_question_list": latest_question_list}
return render(request, "polls/index.html", context)
# 질문 상세 페이지에 대한 뷰!
def detail(request, question_id):
question = get_object_or_404(Question, pk=question_id)
return render(request, 'polls/detail.html', {'question' : question})
3-2. polls/templates/polls/index.html
{% if questions %}
<ul>
{% for question in questions %}
<li><a href="{% url 'polls:detail' question.id %}">{{question.question_text}}</a></li>
{% endfor %}
</ul>
{% else %}
<p>no questions</p>
{% endif %}
'{% %}' 를 통해 html에서 조건, 반복문을 쓸 수 있다는 사실을 알 수 있었습니다!
3-3. polls/templates/polls/detail.html
<form action={% url 'polls:vote' question.id %} method="post">
{% csrf_token %}
<h1>{{question.question_text}}</h1>
{% if error_message %}
<p><strong>{{ error_message }}</strong></p>
{% endif %}
{% for choice in question.choice_set.all %}
<input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{choice.id}}">
<label for="choice {{ forloop.counter }}">
{{choice.choice_text}}
</label>
</br>
{% endfor %}
<input type="submit" value="Vote">
</form>
3-4. polls/urls.py
from django.urls import path
from . import views
from .views import *
app_name = 'polls'
urlpatterns = [
path('', views.index, name='index'),
path('<int:question_id>/', views.detail, name='detail'),
]
이렇게 구성하여 polls/index, polls/detail 페이지를 만들 수 있었습니다.
페이지가 어떻게 구성되는 지도 확인해봐야겠죠??
4. 결과 확인
$ python manage.py runserver
4-1. polls/index 페이지
3-4를 확인하시면 알 수 있겠지만, index 페이지의 path 구성 시에 공백을 주어 app_name의 경로가 index의 경로인 것을 확인할 수 있습니다!
4-2. polls/detail 페이지
이렇게 해당 질문을 참조하는 Choice의 목록과 vote 버튼으로 구성된 상세 페이지를 확인할 수 있습니다!
마치며..
실습과 강의, 문서를 통해 공부를 하고 있는데, 처음 다루는 것도 있고, 코딩을 오랜만에 하는 것도 있고.. 살~짝 시간이 모자라네요.ㅋ.ㅋ..
선택지를 고르고 투표를 하는 페이지와 기능까지 만들까 생각도 있지만, 아무래도 실습의 경우 제 설명보다 직접 겪는게 더 좋을 것 같다는 생각도 있고, 자세한 설명을 하기에 부족할 것 같아, 생략을 하였습니다!
투표 기능에 대해 실습을 하고 싶으신 분은 위에 첨부한 Django 공식 문서에서 진행하실 수 있으니, 관심있으신 분은 실습을 진행해보는 것이 좋을 것 같습니다!!
해당 포스팅에 없는 내용이라도, 질문할 내용이 있으면 편하게 댓글 달아주세요!! (+ 제가 모르는 내용이라도 같이 고민해드릴게요...)
오늘 포스팅도 봐주셔서 감사합니다!
'Django' 카테고리의 다른 글
[Django] Django - 4 (Handling models in shell - Part 2) (0) | 2024.10.10 |
---|---|
[Django] Django - 3 (Handling models in shell - Part 1) (2) | 2024.10.08 |
[Django] Django - 2 (Admin) (0) | 2024.10.08 |
[Django] Django - 1 (개념 및 실습) (2) | 2024.10.07 |