320x100
django에서 reserve 는 아직 이해가 완벽하지 않다.
어렴풋이는 이해했기에 일단은 넘어간다.
path만들어 줄때 사용되는 것 같다.
그리고 전체적인 짜임새적으로 봤을때 정말 대단하다.
페이지를 클릭했을때 각 페이지가 연동되어있는 것은
# 첫번째 파일
challenges > views.py
아주 많이 건드렸다. 하지만 index 함수와 reverse 모듈만 불러온게 추가사항이다.
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseNotFound, HttpResponseRedirect
from django.urls import reverse
monthly_challenges = {
'january':'Eat no meat for the entire month!',
'february': 'Walk for at least 20 minutes every day!',
'march': 'Learn Django for at least 20 minutes every day',
'april': 'Eat no meat for the entire month',
'may': 'Walk for at least 20 minutes every day',
'june': 'Learn Django for at least 20 minutes every day',
'july': 'Eat no meat for the entire month',
'august': 'Walk for at least 20 minutes every day',
'september': 'Learn Django for at least 20 minutes every day',
'october': 'Eat no meat for the entire month',
'november' :'Walk for at least 20 minutes every day',
'december' : 'Learn Django for at least 20 minutes every day'
}
# Create your views here.
def index(request):
list_items = ''
months = list(monthly_challenges.keys())
for month in months:
# month에 해당하는게 대문자로 출력
capitalized_month = month.capitalize()
# 이건 어떻게 활용하는건지 잘 모르겠다.
month_path = reverse('month-challenge', args = [month])
list_items += f'<li><a href="{month_path}">{capitalized_month}</a></li>'
# list items
response_data = f'<ul>{list_items}</ul>'
return HttpResponse(response_data)
def monthly_challenge_by_number(request, month):
months = list(monthly_challenges.keys())
if month > len(months):
return HttpResponseNotFound('Invalid month')
# -1를 해주는 이유는 기본적으로 리스트 인덱스는 0 부터 시작되기 때문에 0을 입력했을때 1월이 나오게 하려고
# 내 생각엔 +1를 해줘야할 것같은데 왜 작동이 될까?
redirect_month = months[month - 1]
redirect_path = reverse('month-challenge', args = [redirect_month]) # /challenge/january
return HttpResponseRedirect(redirect_path)
def monthly_challenge(request, month):
try:
challenge_text = monthly_challenges[month]
# html의 h1태그 효과
response_data = f'<h1>{challenge_text}</h1>'
# 성공했을때
return HttpResponse(response_data)
except:
return HttpResponseNotFound('This month is not supported')
# 두번째 파일
challenges > urls.py
from django.urls import path
# 동일한 폴더 안에 있을때 .를 써준다.
# 현재의 상황에서는 views 파일에 있는 index 함수를 호출해오는 것이다.
from . import views
urlpatterns = [
path('', views.index), # /challenges/
path('<int:month>', views.monthly_challenge_by_number),
path('<str:month>', views.monthly_challenge, name = 'month-challenge')
]
# 세번째 파일
monthly_challenges > urls.py
"""monthly_challenges URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/4.1/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path("admin/", admin.site.urls),
# 특이한점은 경로를 붙일때, 파일의 확장자를 배제하고 urls.py를 urls로만 기입해야 작동한다는 것이다.
path('challenges/', include('challenges.urls'))
]
결과적으로
이런페이지가 생성이 되고, 각 링크를 클릭할때마다, 해당되는 페이지로 이동 및 텍스트 출력이 된다.
300x250
'개발일지 > 임시카테고리' 카테고리의 다른 글
Django - 간단한 연동 웹사이트 구축 (0) | 2022.10.10 |
---|---|
*중요 Django - views.py에서 가져온 변수로 html에 적용하기 (0) | 2022.10.07 |
*아주중요 Django - HttpResponseRedirect(리다이렉트) (0) | 2022.10.07 |
*매우중요 Django - 딕셔너리(dict)로 함수 간결화 하여서 views 호출하기 (0) | 2022.10.07 |
*매우중요 Django - views파일에서 하나의 함수로 다중 urls 호출하기 (0) | 2022.10.07 |