Meme's IT

[Django] App URL 본문

BackEnd/Django

[Django] App URL

Memez 2023. 9. 14. 13:44

만약 App이 많아졌을 때, 서로 겹치는 함수 이름이 있거나 / 같은 패턴의 url 주소를 이용하려면 어떻게 해야할까?

이러한 경우를 해결하기 위해, URL을 각자 APP에서 관리해야 함!

 

 

App URL mapping

프로젝트와 각 앱이 URL을 나누어 정의가 되어 관리를 편하게 할 수 있다.

urls.py의 구조를 바꿔줘야한다.

 

 

한번 해보기

기존의 url의 위치는 project/urls.py → 각각의 app에 urls.py를 만들어 줘서 각자 관리

 

1. 기존의 url 위치인 project/urls.py파일 수정

include() 함수: 프로젝트 내부 앱들의 URL을 참조할 수 있도록 매핑해주는 역할

 

2. 각 app에 urls.py를 생성

# articles/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('articles/', views.index),
    path('dinner/', views.dinner),
]
# pages/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('index/',views.index),
]

 

 


그런데 이렇게 바꿔주면 url주소가 바뀌게 됨 

  다 바꿔주지 말고, URL에 이름을 지어주면 굳이 주소를 안쓰고 이름으로 쓸 수 있지 않을까?

 

 

Naming URL patterns

URL에 이름을 지정해 주는 것, 실제 경로 대신에 지정한 name을 사용할 수 있어서 편리함

urlpatterns = [
    path("index/", views.index, name= 'index'),
    path('dinner/', views.dinner, name = 'dinner'),
    path('search/', views.search,name = 'search'),
]

 

path 함수의 name 키워드 인자를 이용해서 지정해 줄 수 있다.

urls.py파일만 고쳐주는게 아니라 url을 사용하는 모든 위치를 변경해주기(ex. form의 action 속성)

 

'url' tag

{% url 'url-name' arg1 arg2 %}

주어진 URL 패턴의 이름과 일치하는 절대 경로 주소를 반환

 


근데 여기서 app1의 url이름과 app2의 url이름이 같으면..?

→ 이름에 성(= key)을 붙이자

 

'app_name' 속성 지정

# article/urls.py

app_name = 'articles'	# app name추가

urlpatterns = [
    path("index/", views.index, name= 'index'),
    path('dinner/', views.dinner, name = 'dinner'),
    path('search/', views.search,name = 'search'),
]

 

 

URL tag를 바꿔주기: 뒤에 app name 붙여주기

{% url 'articles:index' %}

 

'BackEnd > Django' 카테고리의 다른 글

[Django] Admin Site  (0) 2023.09.14
[Django] Model과 Migrations  (0) 2023.09.14
[Django] 변수와 URL  (0) 2023.09.14
[Django] form활용: throw & catch  (0) 2023.09.13
[Django] 요청과 응답(form)  (0) 2023.09.13