티스토리 뷰

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형태로 출력되는 걸 확인 할 수 있다.

 

위의 3개 포스트는 models.py의 author부분을 추가하기 전에 생성된 post라 DB field 중 author_id Null이라 None으로 표기되며, 4번재 포스트는 신규 유저 생성 후 작성된 포스트라 post작성자 부분에 jinoz_user1이 표기되며, 캡쳐 부분은 잘려있지만 5번째 포스트에도 superuser로 작성된 것을 확인 할 수 있다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
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 29 30 31
글 보관함