diff --git a/README.md b/README.md index 3eedf7c..4e419bf 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Start Django ✨ +# Getting started with Django ✨ [Django Documentation Tutorial](https://docs.djangoproject.com/ko/3.2/intro/)을 따라가며 코드 및 배운 내용을 기록합니다. - **기간** : 2021.08.23 ~ 2021.08.27 @@ -22,11 +22,11 @@ ## Docs -| # | title | date | -| :--: | :-------------------------------------------------: | :--------: | -| 01 | [Start Django](docs/01-start_django.md) | 2021-08-23 | -| 02 | [Database and Admin](docs/02-database_and_admin.md) | 2021-08-24 | - +| # | title | date | +| :--: | :----------------------------------------------: | :--------: | +| 01 | [Start Django](docs/01-start_django.md) | 2021.08.23 | +| 02 | [Database and Admin](docs/02-database_and_admin.md) | 2021.08.24 | +| 03 | [Views](docs/03-views.md) | 2021.08.24 | ## Reference diff --git a/docs/03-views.md b/docs/03-views.md new file mode 100644 index 0000000..f2f3e50 --- /dev/null +++ b/docs/03-views.md @@ -0,0 +1,77 @@ +# 03. Views + +## Views +뷰는 Django 어플리케이션이 특정 기능과 템플릿을 제공하는 웹페이지의 종류 + +### `polls/views.py` +```python +from django.shortcuts import render, get_object_or_404 +from django.http import HttpResponse, Http404 +from django.template import loader +from .models import Question + + +def index(request): + 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): + # 객체가 존재하지 않으면 Http404 에러 발생하는 메서드 + question = get_object_or_404(Question, pk=question_id) + return render(request, 'polls/detail.html', {'question': question}) + + +def results(request, question_id): + response = f"You're looking at the results of question {question_id}" + return HttpResponse(response) + + +def vote(request, question_id): + return HttpResponse(f"You're voting on question {question_id}") +``` + +### `polls/urls.py` +```python +from django.urls import path +from . import views + +app_name = 'polls' # URL의 이름공간 +urlpatterns = [ + # ex: /polls/ + path('', views.index, name='index'), + + # ex: /polls/5/ + path('/', views.detail, name='detail'), + + # ex: /polls/5/results/ + path('/results/', views.results, name='results'), + + # ex: /polls/5/vote/ + path('/vote/', views.vote, name='vote'), +] +``` + +### `polls/templates/polls/index.html` +```html +{% if latest_question_list %} + +{% else %} +

No polls are available.

+{% endif %} +``` + +### `polls/templates/polls/detail.html` +```html +

{{ question.question_text }}

+
    +{% for choice in question.choice_set.all %} +
  • {{ choice.choice_text }}
  • +{% endfor %} +
+``` diff --git a/mysite/mysite/__pycache__/__init__.cpython-39.pyc b/mysite/mysite/__pycache__/__init__.cpython-39.pyc index 16ffc23..3a4218f 100644 Binary files a/mysite/mysite/__pycache__/__init__.cpython-39.pyc and b/mysite/mysite/__pycache__/__init__.cpython-39.pyc differ diff --git a/mysite/mysite/__pycache__/settings.cpython-39.pyc b/mysite/mysite/__pycache__/settings.cpython-39.pyc index e27fdc2..0fcd4b0 100644 Binary files a/mysite/mysite/__pycache__/settings.cpython-39.pyc and b/mysite/mysite/__pycache__/settings.cpython-39.pyc differ diff --git a/mysite/mysite/__pycache__/urls.cpython-39.pyc b/mysite/mysite/__pycache__/urls.cpython-39.pyc index 0152486..6ad352b 100644 Binary files a/mysite/mysite/__pycache__/urls.cpython-39.pyc and b/mysite/mysite/__pycache__/urls.cpython-39.pyc differ diff --git a/mysite/mysite/__pycache__/wsgi.cpython-39.pyc b/mysite/mysite/__pycache__/wsgi.cpython-39.pyc index c84bdf4..8f61401 100644 Binary files a/mysite/mysite/__pycache__/wsgi.cpython-39.pyc and b/mysite/mysite/__pycache__/wsgi.cpython-39.pyc differ diff --git a/mysite/polls/__pycache__/__init__.cpython-39.pyc b/mysite/polls/__pycache__/__init__.cpython-39.pyc index e892ef2..4113482 100644 Binary files a/mysite/polls/__pycache__/__init__.cpython-39.pyc and b/mysite/polls/__pycache__/__init__.cpython-39.pyc differ diff --git a/mysite/polls/__pycache__/admin.cpython-39.pyc b/mysite/polls/__pycache__/admin.cpython-39.pyc index 7122fd3..b1ac5a2 100644 Binary files a/mysite/polls/__pycache__/admin.cpython-39.pyc and b/mysite/polls/__pycache__/admin.cpython-39.pyc differ diff --git a/mysite/polls/__pycache__/apps.cpython-39.pyc b/mysite/polls/__pycache__/apps.cpython-39.pyc index e252dd3..0de1cca 100644 Binary files a/mysite/polls/__pycache__/apps.cpython-39.pyc and b/mysite/polls/__pycache__/apps.cpython-39.pyc differ diff --git a/mysite/polls/__pycache__/models.cpython-39.pyc b/mysite/polls/__pycache__/models.cpython-39.pyc index 6a76737..665e2d3 100644 Binary files a/mysite/polls/__pycache__/models.cpython-39.pyc and b/mysite/polls/__pycache__/models.cpython-39.pyc differ diff --git a/mysite/polls/__pycache__/urls.cpython-39.pyc b/mysite/polls/__pycache__/urls.cpython-39.pyc index 513f7ee..83f259d 100644 Binary files a/mysite/polls/__pycache__/urls.cpython-39.pyc and b/mysite/polls/__pycache__/urls.cpython-39.pyc differ diff --git a/mysite/polls/__pycache__/views.cpython-39.pyc b/mysite/polls/__pycache__/views.cpython-39.pyc index 0e63f11..f305c1d 100644 Binary files a/mysite/polls/__pycache__/views.cpython-39.pyc and b/mysite/polls/__pycache__/views.cpython-39.pyc differ diff --git a/mysite/polls/migrations/__pycache__/0001_initial.cpython-39.pyc b/mysite/polls/migrations/__pycache__/0001_initial.cpython-39.pyc index a9c4a00..993f9dc 100644 Binary files a/mysite/polls/migrations/__pycache__/0001_initial.cpython-39.pyc and b/mysite/polls/migrations/__pycache__/0001_initial.cpython-39.pyc differ diff --git a/mysite/polls/migrations/__pycache__/__init__.cpython-39.pyc b/mysite/polls/migrations/__pycache__/__init__.cpython-39.pyc index 8eb54ec..7957baf 100644 Binary files a/mysite/polls/migrations/__pycache__/__init__.cpython-39.pyc and b/mysite/polls/migrations/__pycache__/__init__.cpython-39.pyc differ diff --git a/mysite/polls/templates/polls/detail.html b/mysite/polls/templates/polls/detail.html new file mode 100644 index 0000000..4e1bd67 --- /dev/null +++ b/mysite/polls/templates/polls/detail.html @@ -0,0 +1,6 @@ +

{{ question.question_text }}

+
    +{% for choice in question.choice_set.all %} +
  • {{ choice.choice_text }}
  • +{% endfor %} +
\ No newline at end of file diff --git a/mysite/polls/templates/polls/index.html b/mysite/polls/templates/polls/index.html new file mode 100644 index 0000000..6e2e854 --- /dev/null +++ b/mysite/polls/templates/polls/index.html @@ -0,0 +1,9 @@ +{% if latest_question_list %} + +{% else %} +

No polls are available.

+{% endif %} \ No newline at end of file diff --git a/mysite/polls/urls.py b/mysite/polls/urls.py index 6e21aeb..25d2e6d 100644 --- a/mysite/polls/urls.py +++ b/mysite/polls/urls.py @@ -1,6 +1,17 @@ from django.urls import path from . import views +app_name = 'polls' urlpatterns = [ + # ex: /polls/ path('', views.index, name='index'), + + # ex: /polls/5/ + path('/', views.detail, name='detail'), + + # ex: /polls/5/results/ + path('/results/', views.results, name='results'), + + # ex: /polls/5/vote/ + path('/vote/', views.vote, name='vote'), ] diff --git a/mysite/polls/views.py b/mysite/polls/views.py index 9509807..fb43a9c 100644 --- a/mysite/polls/views.py +++ b/mysite/polls/views.py @@ -1,6 +1,26 @@ -from django.shortcuts import render -from django.http import HttpResponse +from django.shortcuts import render, get_object_or_404 +from django.http import HttpResponse, Http404 +from django.template import loader +from .models import Question def index(request): - return HttpResponse("Hello, world! You're at the polls index.") + latest_question_list = Question.objects.order_by('-pub_date')[:5] + context = {'latest_question_list': latest_question_list} + # HttpResponse 객체와 자주 쓰는 표현 단축 : render + 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}) + + +def results(request, question_id): + response = f"You're looking at the results of question {question_id}" + return HttpResponse(response) + + +def vote(request, question_id): + return HttpResponse(f"You're voting on question {question_id}") +