이전 포스팅에서는 Django 애플리케이션을 생성하고 구조를 이해하는 방법을 알아보았습니다. 이번 포스팅에서는 Django의 URL 설정에 대해 다룰 것입니다. URL은 웹 애플리케이션에서 사용자 요청을 특정 뷰로 연결하는 중요한 역할을 합니다. Django의 URL 설정 방식은 매우 직관적이며 확장 가능합니다. 이번 글에서는 URL을 설정하고 뷰와 연결하는 방법을 단계별로 살펴보겠습니다.
1. URL 설정의 중요성
Django에서 URL 설정은 사용자가 웹사이트의 특정 경로로 접근했을 때, 해당 경로에 맞는 데이터를 반환하는 역할을 합니다. 이를 통해 사용자는 페이지를 탐색할 수 있으며, 각 요청은 서버에서 적절한 응답을 받을 수 있습니다. 예를 들어, 사용자가 블로그의 /posts/ 경로로 요청을 보낼 때, 이 요청이 어떤 뷰로 연결되고, 어떤 데이터를 보여줄지를 정의하는 것이 URL 설정입니다.
2. URL 패턴 정의하기
Django에서 URL 패턴은 urls.py 파일에 정의됩니다. 프로젝트 수준의 urls.py 파일은 프로젝트에 존재하는 모든 URL을 정의하거나, 각 애플리케이션의 URL 설정을 포함하도록 구성합니다.
2.1 프로젝트 수준의 urls.py
프로젝트를 생성할 때 기본적으로 myproject/urls.py 파일이 생성됩니다. 이 파일은 기본적으로 관리자(admin) 사이트에 대한 URL을 포함하고 있습니다.
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
path() 함수는 URL 패턴을 정의하고, 사용자가 이 URL로 접속했을 때 어떤 뷰가 호출될지 지정합니다. 여기서는 /admin/ 경로로 요청이 들어오면 Django의 관리자 페이지를 보여주도록 설정된 것입니다.
2.2 애플리케이션 수준의 urls.py
각 애플리케이션에도 자체적인 urls.py 파일을 생성할 수 있으며, 이를 통해 애플리케이션 별로 URL을 관리할 수 있습니다. 예를 들어, 블로그 애플리케이션에 대한 URL 설정 파일을 만들어보겠습니다.
먼저 blog/urls.py 파일을 생성하고, 다음과 같이 작성합니다.
from django.urls import path
from . import views
urlpatterns = [
path('', views.post_list, name='post_list'),
path('<int:id>/', views.post_detail, name='post_detail'),
]
- 첫 번째 경로는 빈 문자열('')로, 사용자가 /로 요청했을 때 post_list 뷰가 실행됩니다.
- 두 번째 경로는 동적 경로로, 사용자가 /posts/1/처럼 숫자 ID를 포함한 URL로 접근하면 post_detail 뷰가 실행됩니다.
3. URL과 뷰 연결하기
위에서 정의한 URL 패턴은 뷰 함수와 연결됩니다. 뷰 함수는 URL 요청을 받아 처리한 후, 클라이언트에게 응답을 반환하는 역할을 합니다.
3.1 post_list 뷰 작성하기
이제 URL에 연결할 뷰를 작성해보겠습니다. blog/views.py 파일을 열고, 간단한 뷰를 만들어봅니다.
from django.shortcuts import render
from .models import Post
def post_list(request):
posts = Post.objects.all()
return render(request, 'blog/post_list.html', {'posts': posts})
이 뷰는 모든 블로그 게시글을 가져와서 post_list.html 템플릿에 렌더링하여 사용자에게 보여줍니다.
3.2 post_detail 뷰 작성하기
post_detail 뷰는 특정 게시글의 상세 내용을 보여주는 역할을 합니다.
from django.shortcuts import render, get_object_or_404
from .models import Post
def post_detail(request, id):
post = get_object_or_404(Post, id=id)
return render(request, 'blog/post_detail.html', {'post': post})
여기서는 특정 ID를 가진 게시글을 데이터베이스에서 가져오고, 만약 해당 ID의 게시글이 존재하지 않으면 404 에러 페이지를 반환합니다.
4. 프로젝트 urls.py에서 애플리케이션 URL 연결
이제 프로젝트의 urls.py 파일에서 블로그 애플리케이션의 URL을 포함시켜야 합니다. 이를 통해 블로그와 관련된 모든 URL을 애플리케이션에서 관리할 수 있습니다.
myproject/urls.py 파일을 다음과 같이 수정합니다.
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')), # blog 애플리케이션의 URL 포함
]
여기서는 include() 함수를 사용하여 blog/urls.py에 정의된 모든 URL을 포함합니다. 이제 사용자가 /blog/ 경로로 요청하면, 해당 요청은 blog/urls.py에서 정의된 URL 패턴에 따라 처리됩니다.
5. 동적 URL 패턴
Django에서는 동적인 URL 패턴을 지원하여 URL에 변수를 포함할 수 있습니다. 예를 들어, 게시글의 ID를 포함한 URL을 통해 특정 게시글을 보여줄 수 있습니다. 위에서 본 것처럼 <int:id>/와 같은 패턴은 정수 값을 받아 뷰에 전달합니다.
다른 동적 패턴 예시:
- <slug:slug>/: 슬러그 값을 받는 URL
- <str:username>/: 문자열 값을 받는 URL
이렇게 동적인 URL을 사용하면 다양한 데이터베이스 항목을 사용자 요청에 따라 동적으로 처리할 수 있습니다.
이번 포스팅에서는 Django에서 URL을 설정하고, 뷰와 연결하는 방법을 알아보았습니다. URL 설정은 Django에서 매우 중요한 역할을 하며, 이를 통해 사용자의 요청을 적절히 처리할 수 있습니다. 이제 여러분은 Django 애플리케이션에서 URL과 뷰를 연결하는 기본적인 방법을 알게 되었을 것입니다.
다음 포스팅에서는 Django 템플릿 시스템을 활용하여 HTML 페이지를 생성하고, 데이터를 렌더링하는 방법에 대해 다룰 예정입니다.
'Development Frameworks > Django' 카테고리의 다른 글
[Django] 장고 마스터하기 (Django Tutorial) - Django HTML 템플릿 시스템 [7/11] (1) | 2024.10.06 |
---|---|
[Django] 장고 마스터하기 (Django Tutorial) - Django 서버 실행 및 관리[6/11] (1) | 2024.10.05 |
[Django] 장고 마스터하기 (Django Tutorial) - Django 애플리케이션 [4/11] (2) | 2024.10.03 |
[Django] 장고 마스터하기 (Django Tutorial) - Django 프로젝트의 자동 생성된 파일 설명 [3/11] (1) | 2024.10.02 |
[Django] 장고 마스터하기 (Django Tutorial) - 프로젝트 설정 가이드: 첫 걸음 [2/11] (2) | 2024.10.01 |