[Django] App URL

    만약 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

    댓글