티스토리 뷰
Intro
(macOS)[python] django post_list site에 구현하기 - 1/2
지난 포스트에 이어 DB table post_post Table을 127.0.0.1:8000에 접속 시 첫화면에 리스트를 불러오도록 해보려고 한다.
jinozblog2019 tree : views.py에서 DB Table을 다룰 것이며, 첫화면 welcomemessage를 지우고 urls.py에 할당한다.
.
├── db.sqlite3
├── jblog
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
└── post
├── __init__.py
├── admin.py
├── apps.py
├── migrations
├── models.py
├── templates
│ └── home.html
├── tests.py
└── views.py
3. views.py 수정
--post/views.py
# from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
def post_list(request):
return render(request, 'post_list.html')
# def homemessage(request):
# return render(request, 'home.html')
초기 views.py의 welcomemessage method는 지우고 HttpReponse와 homemessage method부분은 주석처리하였다.
4. urls.py 수정
--jblog/urls.py
from django.contrib import admin
from django.urls import path
from post.views import post_list
urlpatterns = [
path('admin/', admin.site.urls),
path('', post_list, name='post_list'),
# path('/home', homemessage)
]
초기 urls.py의 welcomemessage path는 지우고 homemessage path부분은 주석처리하였다.
그리고 post_list만 import하고 welcomemessage, homemessage부분은삭제했다.
일단 여기까지 수행이되면 개발서버의 오류메세지는 만나지 않게된다.
5. post/templates/post_list.html 생성
127.0.0.1:8000에 접속하면 다음과 같은 Error 페이지를 만나게된다.
Error 페이지는 자주 만나게될 페이지이므로 당황할 필요는 없다.
TemplateDoesNotExist at / post_list.html
post_list.html이 templates에 존재하지 않는다는 의미이다.
아래 회색부분 Template-loader postmortem에서 보면 post_list.html을 열심히 찾은 흔적이 남아있다.
첫번째 경로가 jinozblog2019/templates를 훑어본 기록이고,
두번째 경로가 jinozblog2019/post/templates를 훑어본 기록이다.
jinozblog2019/post/templates 여기 그 두번째 경로에 post_list.html 파일을 생성한다.
--jinozblog2019/post/templates/post_list.html
<h1> post_list 위치가 맞나요? </h1>
새로고침해보면 제대로 찾아온 것을 확인 할 수 있다.
6. QuerySet 만들기(ORM, Object Relation Mapping, 가상 객체 DB를 구축하는 방법)
jinozblog2019/post/templates/post_list.html에 동적템플릿을 사용하여 리스트를 뿌리기 위해서
DB에 있는 table record를 인스턴스화(객체화)하여 Queryset을 만들고 그 객체(object, instance)를 다루어야한다.
먼제 instance를 생성하기 위해 project 상위폴더인 jinozblog2019에서 다음을 실행하여 QuerySet 생성과정을 이해해보자.
(jbe)$ python3 manage.py shell
Python 3.7.4 (default, Jul 9 2019, 18:13:23)
[Clang 10.0.1 (clang-1001.0.46.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from post.models import Post
>>> tests = Post.objects.all()
>>> print(tests)
<QuerySet [<Post: 사용자 추가 - jinoz_user1>, <Post: Don't use Enter key>, <Post: User : jinozblog2019>, <Post: Author 반영 후 jinoz_user1 선택 반영>, <Post: superuser post after migrations: jinozblog2019>]>
django shell(InteractiveConsole)에서 Post를 import하여 tests 변수에 모든 객체를 담아서 print해보면 QuerySet을 확인할 수 있다.
7. views.py, post_list.html 수정 적용
--views.py
# from django.http import HttpResponse
from django.shortcuts import render
from post.models import Post
# Create your views here.
def post_list(request):
posts = Post.objects.all()
context = {'posts':posts}
return render(request, 'post_list.html', context)
def homemessage(request):
return render(request, 'home.html')
--post/templates/post_list.html
<h1> post_list 위치가 맞나요? </h1>
<body>
<h1> {{ posts }} </h1>
</body>
127.0.0.1:8000을 새로고침하면 다음과 같이 화면에 <QuerySet ...>이 출력되는 걸 확인 할 수 있다.
위에서 만들어진 QuerySet을 post제목, post내용, post작성자/발행일 순서로 나열해보자.
python for문을 템플릿언어로 post_list.html에 적용해보자.
템플릿언어는 모델에서 선언한 클래스를 객체화(인스턴스화)하여 객체.속성 형태로 템플릿에 전달하여 사용한다.
아래 보이는 {% %}는 템플릿 테그를 사용한 모습니다.
--post/templates/post_list.html
<h3> post_list 위치가 맞나요? </h3>
<h3> ------구분선------ </h3>
<body>
{% for post in posts %}
<div>
<h2>post제목 : {{ post.title }}</h2>
<h3>post내용 : {{ post.text }}</h3>
<h4>post작성자/발행일 : {{ post.author }} / {{ post.pub_date }}</h4>
<h5>-------------------------------------</h5>
</div>
{% endfor %}
</body>
127.0.0.1:8000을 새로고침하면 다음과 같이 화면에 list형태로 출력되는 걸 확인 할 수 있다.
![](https://blog.kakaocdn.net/dn/6SSbv/btqy293v4YH/dv4KkK24PzKw4ois5P4bkK/img.png)
위의 3개 포스트는 models.py의 author부분을 추가하기 전에 생성된 post라 DB field 중 author_id Null이라 None으로 표기되며, 4번재 포스트는 신규 유저 생성 후 작성된 포스트라 post작성자 부분에 jinoz_user1이 표기되며, 캡쳐 부분은 잘려있지만 5번째 포스트에도 superuser로 작성된 것을 확인 할 수 있다.
'python > Django' 카테고리의 다른 글
(macOS)[python] django post_detail 구현하기 (0) | 2019.10.15 |
---|---|
[python] django project 구성 및 용어 정리 - 진행중.... (0) | 2019.10.15 |
(macOS)[python] django post_list site에 구현하기 - 1/2 (0) | 2019.10.11 |
(macOS)[python] localhost(127.0.0.1:8000) main page에 "Welcome to visit django:jinoblog2019" 출력하기 (0) | 2019.10.10 |
[python] django(장고, 웹 프레임워크), MTV Architecture: Model-Template-View (0) | 2019.10.08 |
- Total
- Today
- Yesterday
- template
- DS18B20
- DAQ
- Regression
- 라즈베리파이
- github
- r
- Templates
- 코로나19
- vscode
- sublime text
- server
- MacOS
- pyserial
- git
- 확진
- Raspberry Pi
- Python
- Pandas
- Model
- COVID-19
- CSV
- 자가격리
- ERP
- Django
- raspberrypi
- SSH
- arduino
- 코로나
- analysis
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |