[Django] Django - 5 (View & Template)

2024. 10. 10. 20:22·Django

주절주절 서론

이번 포스팅에서는 앞서 만든 오브젝트, 모델. 즉, 데이터를 저희가 직접 볼 수 있도록 뷰와 템플릿을 제작하려고 합니다!

해당 포스팅은 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 페이지

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
'Django' 카테고리의 다른 글
  • [Django] Django - 4 (Handling models in shell - Part 2)
  • [Django] Django - 3 (Handling models in shell - Part 1)
  • [Django] Django - 2 (Admin)
  • [Django] Django - 1 (개념 및 실습)
김줘
김줘
김줘와 같이 데이터, 컴퓨터, IT 공부
  • 김줘
    초보개발자 김줘의 코딩일기
    김줘
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 데이터 엔지니어링 데브코스
      • 데이터
        • Airflow
        • Spark
        • Kafka
        • dbt
      • TroubleShooting
      • Docker
      • AWS
      • 크롤링, 스크래핑, 시각화
        • Selenium
        • 시각화
      • 코딩테스트
        • 프로그래머스
        • 입출력과 사칙연산
        • 정렬
      • Django
      • 자바 공부
      • 끄적끄적
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    aws
    Java
    에어플로우
    데이터 엔지니어링 데브코스
    TiL
    부트캠프
    초보개발자
    데이터 엔지니어
    cloud
    프로그래밍
    프로그래머스
    파이썬
    Airflow
    자바
    Python
    티스토리챌린지
    오블완
    데이터 엔지니어링 데브코스 4기
    Azure
    데브코스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
김줘
[Django] Django - 5 (View & Template)
상단으로

티스토리툴바