320x100
# 첫번째 파일
challenges > views.py
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseNotFound, HttpResponseRedirect
from django.urls import reverse
from django.template.loader import render_to_string
monthly_challenges = {
'january':'January',
'february': 'February',
'march': 'March',
'april': 'April',
'may': 'May',
'june': 'June',
'july': 'July',
'august': 'August',
'september': 'September',
'october': 'October',
'november' :'November',
'december' : 'December'
}
# Create your views here.
def index(request):
list_items = ''
months = list(monthly_challenges.keys())
for month in months:
capitalized_month = month.capitalize()
month_path = reverse('month-challenge', args = [month])
list_items += f'<li><a href="{month_path}">{capitalized_month}</a></li>'
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')
redirect_month = months[month - 1]
redirect_path = reverse('month-challenge', args = [redirect_month]) # /challenge/january
return HttpResponseRedirect(redirect_path)
# html에 전하는 return 문구 함수
def monthly_challenge(request, month):
try:
challenge_text = monthly_challenges[month]
return render(request, 'challenges/challenge.html', {
'text': challenge_text,
'month_name': month.capitalize()
})
except:
return HttpResponseNotFound('<h1>This month is not supported</h1>')
# 두번째 파일
monthly_challenges > settings.py
* INSTALL_APPS 부분에 challenges 앱만 추가해주었다.
"""
Django settings for monthly_challenges project.
Generated by 'django-admin startproject' using Django 4.1.1.
For more information on this file, see
https://docs.djangoproject.com/en/4.1/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/4.1/ref/settings/
"""
from pathlib import Path
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = "django-insecure-jm7724)a2@d03@@cim@cu!4u6x#f#mpq+(uga%esqgv#mg42j$"
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
'challenges',
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
]
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
ROOT_URLCONF = "monthly_challenges.urls"
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [
# BASE_DIR / 'challenges' / 'templates'
],
"APP_DIRS": True,
"OPTIONS": {
"context_processors": [
"django.template.context_processors.debug",
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
],
},
},
]
WSGI_APPLICATION = "monthly_challenges.wsgi.application"
# Database
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": BASE_DIR / "db.sqlite3",
}
}
# Password validation
# https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
},
{"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",},
{"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",},
{"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",},
]
# Internationalization
# https://docs.djangoproject.com/en/4.1/topics/i18n/
LANGUAGE_CODE = "en-us"
TIME_ZONE = "UTC"
USE_I18N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.1/howto/static-files/
STATIC_URL = "static/"
# Default primary key field type
# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
# 세번째 파일
challenges > templates > challenges > challenge.html
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ month_name}} Challenge</title>
</head>
<body>
{% comment %} 여기서 말하는 {{}}안에 들어있는 변수는 views.py의 함수로 부터 비롯된다. {% endcomment %}
<h1>{{ month_name }} Challenge</h1>
<h2>{{ text }}</h2>
</body>
</html>
300x250
'개발일지 > 임시카테고리' 카테고리의 다른 글
Git - 이름, 이메일 확인 및 설정 (1) | 2022.10.10 |
---|---|
Django - 간단한 연동 웹사이트 구축 (0) | 2022.10.10 |
Django - reserve (어렵다 하지만 중요하다) (0) | 2022.10.07 |
*아주중요 Django - HttpResponseRedirect(리다이렉트) (0) | 2022.10.07 |
*매우중요 Django - 딕셔너리(dict)로 함수 간결화 하여서 views 호출하기 (0) | 2022.10.07 |