Django 글 작성 목록
urls.py
웹 사이트를 구현함에 있어 모든 페이지마다 url의 지정이 필요합니다.
장고에서는 이를 urls.py 파일을 통해 구현할 수 있습니다.
즉, 장고에서는 urls.y 파일을 통해 라우팅을 진행할 수 있습니다.
'프로젝트/urls.py' 파일을 열고 코드를 추가하겠습니다.
from django.contrib import admin
from django.urls import path
from django.conf.urls import include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')),
]
blog/로 접속하는 경우, blog앱의 urls.py를 참고한다는 내용입니다.
blog앱 폴더안에는 urls.py 파일이 없으니 추가하도록 하겠습니다.
위와 같이 blog앱 폴더 안에 urls.py를 추가했습니다.
views.py
urls.py에 들어가는 함수 혹은 클래스는 views.py에서 정의할 수 있습니다.
함수 혹은 클래스 방식으로 구현할 수 있는데 이를 FBV, CBV라 지칭합니다.
FBV(Function based view)
FBV는 함수에 기반을 둔 방법입니다.
함수를 직접 만들고, 원하는 기능을 직접 구현할 수 있습니다.
CBV(Class based view)
CBV는 장고가 제공하는 클래스에 기반을 둔 방법입니다.
장고는 웹 개발시, 반복적으로 많이 구현하는 것들에 대해서 클래스로 제공하고 있습니다.
CBV는 이러한 클래스들을 활용하는 방법입니다.
저는 간단하게 웹 페이지를 만들고 구현할 것이기 때문에 CBV 방식으로 진행하도록 하겠습니다.
포스트 목록 페이지 - ListView
from django.shortcuts import render
from django.views.generic import ListView
from .models import Post
# Create your views here.
class PostList(ListView):
model = Post
먼저, blog/views.py 파일에 다음 코드를 작성합니다.
ListView와 클래스를 추가한 내용입니다.
from django.urls import path
from . import views
urlpatterns = [
path('', views.PostList.as_view()),
]
blog/urls.py에는 다음과 같은 내용을 추가합니다.
url의 끝이 blog/ 일 때, PostList 클래스로 처리하겠다는 내용입니다.
서버를 실행하고 /blog 을 붙여 url에 접속하면, 위와 같은 오류가 발생합니다.
url 설정은 잘 적용되었지만, html 파일이 없기 때문에 발생하는 오류입니다.
html 파일을 만들기 위해서,
blog앱 폴더 내에 templates 폴더를 만들고 다시 blog폴더를 만든 후, index.html 파일을 생성합니다.
그 후, views.py 파일에서 PostList 클래스에 다음 내용을 추가합니다.
class PostList(ListView):
model = Post
template_name = 'blog/index.html'
template_name = 'blog/index.html' 코드를 통해
템플릿 이름을 지정해줌으로써 index.html 파일을 지정하겠다는 의미입니다.
index.html 파일의 내용은 다음과 같습니다.
위의 결과는 서버를 실행하고 /blog/의 url로 접속한 모습입니다.
위의 코드를 추가해, 받아온 레코드들을 for문으로 출력할 수 있습니다.
for 문의 부분은 {% %}로 감싸주고, 변수는 {{ }}로 감싸 처리합니다.
최신 글의 순서를 상단으로 위치시키기 위해서, views.py의 클래스에 ordering을 '-pk'로 지정합니다.
get_absolute_url 이라는 함수를 아직 정의하지 않았기 때문에, 링크를 눌러도 상세 페이지로 이동하지는 않습니다. blog/models.py 파일에서 바로 정의해보도록 하겠습니다.
위와 같이 get_aboslute_url 함수를 추가했습니다.
포스트 상세 페이지 - DetailView
여러 레코드를 불러와 리스트를 표시할 때 ListView를 사용했습니다.
이번에는, 한 레코드에 대한 내용을 자세히 출력하기 위해서 DetailView를 사용하겠습니다.
마찬가지로, views.py 파일에 코드를 추가합니다.
model = Post로 모델을 정의하고, template_name을 통해 html 템플릿을 지정했습니다.
blog/urls.py 파일에도 위와 같은 코드를 작성해 url을 지정합니다.
최종적으로, 위와 같은 결과를 완성했습니다.
다음 글에서는 구현한 내용에 부트스트랩을 적용해보도록 하겠습니다.
'웹 프로그래밍 > Django' 카테고리의 다른 글
[Django] 회원가입 구현과 패스워드 암호화(bcrypt) (0) | 2022.12.13 |
---|---|
[Django] PostgreSQL 설치와 장고에 연동하기 (0) | 2022.11.24 |
[Django] 5. 장고 모델 만들고 반영해보기(2) - 세부 설정 (0) | 2022.05.02 |
[Django] 4. 장고 모델 만들고 반영해보기(1) - models.py (0) | 2022.05.02 |
[Django] 3. 장고로 앱 생성하기 - manage.py startapp (0) | 2022.05.02 |
댓글