이번에는 템플릿과 데이터베이스 모델을 어떻게 연결하는지에 대해서 알아보겠습니다.
하지만 Django와 관련하여 아직 배우지 못한 두 가지 주요 아이디어가 여전히 있음을 유념해주세요.
우리가 배워야 할 주요 기능은 Django Form입니다.
Django는 Python에서 템플릿 및 클래스 기반 뷰에 이르기까지 폼을 자동으로 생성할 수 있습니다.
이는 모델을 기반으로 하는 DetailView 또는 ListView와 같은 뷰를 자동으로 생성하는 매우 강력한 도구입니다.
따라서 그 모델 클래스를 사용하는 것만으로도 많은 작업을 수행할 수 있습니다.
- 새로운 view 생성 및 url 연결방법(이미 알고 있는 부분이지만 다시한번 정리합니다)
1. 장고앱 내부의 views.py 수정(\office\views.py)
from django.shortcuts import render
# Create your views here.
def list_patients(request):
return 'nothing'
2. 장고앱 내부에 urls.py 생성
from django.urls import path
from . import views
# domain.com/office ---> list of all the patients
# urlspatterns 철자를 틀리게하여 오류가 발생하게 코딩함
urlspatterns = [
path('', views.list_patients, name = 'list_patients'),
]
3. 프로젝트의 urls.py 수정 - 직접/간접 호출하는 경우, 모두 구현, 현재는 간접호출로 설정됨.
"""my_site 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 include, path
urlpatterns = [
path('office/', include('office.urls')),
path('admin/', admin.site.urls),
]
여기까지가 기본적인 구조입니다.
여기서 모델을 연결하기 위해서는 views.py 파일에 대한 추가 코딩이 필요합니다.
from django.shortcuts import render
from . import models # 모델 추가
# Create your views here.
def list_patients(request):
all_patients = models.Patient.objects.all()
context_list = {'patients' : all_patients}
return render(request, 'office/list.html', context=context_list)
템플릿 만들기 - .\my_site\office\templates\office\list.html
<!DOCTYPE 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>Patients List</title>
</head>
<body>
{{patients}}
</body>
</html>
오류 로그 - 앱내부의 urls.py 에 의도한 철자 오류. 철자를 수정하면 된다.
(django) D:\workspace\Python\Django\DJANGO4\DJANGO_COURSE_V2\08-Django-Models-Databases\my_site>python manage.py runserv
er
Watching for file changes with StatReloader
Performing system checks...
Exception in thread django-main-thread:
Traceback (most recent call last):
File "C:\Users\MIKE-mini\.conda\envs\django\lib\site-packages\django\urls\resolvers.py", line 717, in url_patterns
iter(patterns)
TypeError: 'module' object is not iterable
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\MIKE-mini\.conda\envs\django\lib\threading.py", line 1009, in _bootstrap_inner
self.run()
File "C:\Users\MIKE-mini\.conda\envs\django\lib\threading.py", line 946, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\MIKE-mini\.conda\envs\django\lib\site-packages\django\utils\autoreload.py", line 64, in wrapper
fn(*args, **kwargs)
File "C:\Users\MIKE-mini\.conda\envs\django\lib\site-packages\django\core\management\commands\runserver.py", line 134, in inner_run
self.check(display_num_errors=True)
File "C:\Users\MIKE-mini\.conda\envs\django\lib\site-packages\django\core\management\base.py", line 475, in check
all_issues = checks.run_checks(
File "C:\Users\MIKE-mini\.conda\envs\django\lib\site-packages\django\core\checks\registry.py", line 88, in run_checks
new_errors = check(app_configs=app_configs, databases=databases)
File "C:\Users\MIKE-mini\.conda\envs\django\lib\site-packages\django\core\checks\urls.py", line 14, in check_url_config
return check_resolver(resolver)
File "C:\Users\MIKE-mini\.conda\envs\django\lib\site-packages\django\core\checks\urls.py", line 24, in check_resolver
return check_method()
File "C:\Users\MIKE-mini\.conda\envs\django\lib\site-packages\django\urls\resolvers.py", line 495, in check
messages.extend(check_resolver(pattern))
File "C:\Users\MIKE-mini\.conda\envs\django\lib\site-packages\django\core\checks\urls.py", line 24, in check_resolver
return check_method()
File "C:\Users\MIKE-mini\.conda\envs\django\lib\site-packages\django\urls\resolvers.py", line 494, in check
for pattern in self.url_patterns:
File "C:\Users\MIKE-mini\.conda\envs\django\lib\site-packages\django\utils\functional.py", line 57, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "C:\Users\MIKE-mini\.conda\envs\django\lib\site-packages\django\urls\resolvers.py", line 725, in url_patterns
raise ImproperlyConfigured(msg.format(name=self.urlconf_name)) from e
django.core.exceptions.ImproperlyConfigured: The included URLconf '<module 'office.urls' from 'D:\\workspace\\Python\\Django\\DJANGO4\\DJANGO_COURSE_V2\\08-Django-Models-Databases\\my_site\\office\\urls.py'>' does not appear to have any patterns in it. If you see the 'urlpatterns' variable with valid patterns in the file then the issue is probably caused by a circular import.
앱내부에 템플릿 설정하는 방법이 기억나지 않으면 이전 블로그를 참고하세요.
2022.10.25 - [Python/Django] - [Django] Django - (맛보기 migrate)App별 template 디렉토리
앱레벨의 urls.py 파일에서 urlpatterns 철자 오류를 수정하면 아래 처럼 디비의 정보를 화면에 보여줄 수 있다.
템플릿을 보기 좋게 수정하겠습니다 - .\my_site\office\templates\office\list.html
<!DOCTYPE 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>Patients List</title>
</head>
<body>
{{patients}}
<br><br>
<ul>
{% for person in patients %}
<li>{{person}}</li>
{% endfor %}
</ul>
</body>
</html>
결과 화면 - 보기편하게 수정된 화면
'Python > Django' 카테고리의 다른 글
[Django] 기존 프로젝트에 장고앱 추가 (0) | 2022.11.03 |
---|---|
[Django] 지금까지 요약(프로젝트 생성에서 DB 연결까지) (0) | 2022.11.02 |
[Django] DB - Update, Delete (0) | 2022.11.01 |
[Django] DB - Create(Insert), Read (0) | 2022.10.29 |
[Django] Django - (basic migrate) DB, model, field (0) | 2022.10.28 |