본문 바로가기
Web Programming/django

[Django] URL 관리

by 테리는당근을좋아해 2020. 6. 22.

목표

- app 단위로 url을 관리할 수 있다.

 

 

urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', blog.views.index, name='index'),
    path('detail/<int:post_id>/', blog.views.detail, name='detail'),
    path('create/', blog.views.create, name='create'),
    path('delete/<int:post_id>/', blog.views.delete, name='delete'),
    path('update/<int:post_id>/', blog.views.update, name='update'),
    path('login/', account.views.login, name='login'),
    path('signup/', account.views.signup, name='signup'),
    path('logout/', account.views.logout, name='logout'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

이전 포스트에서 계속해서 설정해준 url이다.

 

프로젝트 단위에서 url을 관리하면

웹 애플리케이션에 기능이 추가될수록 url은 더 많아질 것이고, 가독성이 떨어지고, 유지보수가 힘들어질 것이다.

 

Django는 앱 단위로 url을 관리할 수 있다.

app 단위로 url을 관리하므로써 추후 app을 다른 프로젝트에 확장하기에도 편하다.

 

그럼 app 단위로 url을 관리하는 방법을 알아보자

 

 

urls.py 생성(app)

blog(app) 내에 urls.py 파일을 하나 생성한다.

 

from . import views
from django.urls import path

urlpatterns = [
    path('detail/<int:post_id>/', views.detail, name='detail'),
    path('create/', views.create, name='create'),
    path('delete/<int:post_id>/', views.delete, name='delete'),
    path('update/<int:post_id>/', views.update, name='update'),
]

 

그리고 urls.py에 blog app과 관련된 path를 모두 설정해준다.

 

 

urls.py 수정(project)

from django.contrib import admin
from django.urls import path
import blog.views
import account.views
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', blog.views.index, name='index'),
    path('detail/<int:post_id>/', blog.views.detail, name='detail'),
    path('create/', blog.views.create, name='create'),
    path('delete/<int:post_id>/', blog.views.delete, name='delete'),
    path('update/<int:post_id>/', blog.views.update, name='update'),
    path('login/', account.views.login, name='login'),
    path('signup/', account.views.signup, name='signup'),
    path('logout/', account.views.logout, name='logout'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

project 디렉터리의 urls.py에서 include 메소드를 import 해준다음,

blog(app)과 관련된 path를 지우고 'path('blog/', include('blog.urls')),'로 수정한다.

 

from django.contrib import admin
from django.urls import path, include
import blog.views
import account.views
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', blog.views.index, name='index'),
    path('blog/', include('blog.urls')),
    path('login/', account.views.login, name='login'),
    path('signup/', account.views.signup, name='signup'),
    path('logout/', account.views.logout, name='logout'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

 

 

view

한 가지 처리가 더 필요하다.

기존에 views.py 에서 redirect 메소드 안에 app명에 대한 명시가 필요하다.

redirect 메소드를 아래와 같이 app명을 명시해주자

return redirect('/blog/detail/' + str(post.id))

 

 

프로젝트 내의 모든 app에 대해 같은 방식으로 처리해주면 urls.py는 아래처럼 보기 쉽고 간결해질 것이다.

from django.contrib import admin
from django.urls import path, include
import blog.views
import account.views
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', blog.views.index, name='index'),
    path('blog/', include('blog.urls')),
    path('account/', include('account.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

 

 

물론 아직까지 url에 설정해준 path가 적어 큰 효과를 볼 수 없을 수도있지만,

애플리케이션이 커지면서 url을 app 단위로 관리하는 것은 중요하다.

또한, Django가 app 단위로 기능을 개발하는데의 이점을 최대한 가져갈 수 있다.

 

'Web Programming > django' 카테고리의 다른 글

[Django] 템플릿 확장  (0) 2020.06.22
[Django] 부트스트랩  (0) 2020.06.22
[Django] 이미지 업로드  (13) 2020.06.21
[Django] 정적파일  (1) 2020.06.21
[Django] 모델 관계 (2)  (0) 2020.06.21

댓글