URL

행행·2022년 6월 5일
0
post-thumbnail

Django URLs

  • Dispatcher(발송자, 운항 관리자)로서의 URL
  • 웹 애플리케이션은 URL을 통한 클라이언트의 요청에서부터 시작됨

Varialbe Routing

  • URL 주소를 변수로 사용하는 것

  • URL의 일부를 변수로 지정하여 view 함수의 인자로 넘길 수 있음

  • 즉, 변수 값에 따라 하나의 path()에 여러 페이지를 연결시킬 수 있음

  • ex)

    • path(’accounts/user/

      int:user_pk

      /’,...)

      • accounts/user/1 → 1번 user 페이지
      • accounts/user/2 → 2번 user 페이지
  • str

    • ‘/’를 제외하고 비어있지 않은 모든 문자열과 매치
    • 작성하지 않은 경우 기본값
  • int

    • 0 또는 양의 정수와 매치
  • slug

    • ASCII 문자 또는 숫자, 하이픈 및 밑줄 문자로 구성된 모든 슬러그 문자열과 매치
    • ex) building-your-1st-django-site


App URL mapping

  • app의 view 함수가 많아지면서 사용하는 paht() 또한 많아지고, app 또한 더 많이 작성되기 때문에 프로젝트의 urls.py에서 모두 관리하는 것은 프로젝트 유지보수에 좋지 않음
  • 이제는 각 app에 urls.py 를 작성하게 됨

#project_name/urls.py
urlpatterns = [
    path('admin/', admin.site.urls),
    path('articles/', include('articles.urls')), #이제 articles.urls에서 관리해라
]

#app_name/urls.py
app_name = 'articles' #이름설정해주기
urlpatterns = [
    path('', views.index, name='index'),
    path('new/', views.new, name="new"),
    path('create/', views.create, name="create"),
    #pk는 database의 id값
    path('<int:pk>/', views.detail, name="detail"),
    path('<int:pk>/delete/', views.delete, name="delete"),
    path('<int:pk>/edit/', views.edit, name="edit"),
    path('<int:pk>/update/', views.update, name="update"),
]


  • include( )
    • 다른 URLconf(app1/urls.py)들을 참조할 수 있도록 도움
    • 함수 include()를 만나게 되면, URL의 그 시점까지 일치하는 부분을 잘라내고, 남은 문자열 부분을 후속 처리를 위해 include된 URLconf로 전달

  • Djnago는 명시적 상대경로(from .module import ..)를 권장

Naming URL patterns

  • 이제는 링크에 url을 직접 작성하는 것이 아니라 path( )함수의 name 인자를 정의해서 사용
  • Django Template Tag 중 하나인 url 태그를 사용해서 path( ) 함수에 작성한 name을 사용할 수 있음
  • url 설정에 정의된 특정한 경로들의 의존성을 제거할 수 있음

path('index/',views.index,name='index'),

<a href="{%url 'index'%}">메인페이지</a>

{%url ‘’%}

  • 주어진 URL 패턴 이름 및 선택적 매개 변수와 일치하는 절대 경로 주소를 반환
  • 템플릿에 URL을 하드 코딩하지 않고도 DRY원칙을 위반하지 않으면서 링크를 출력하는 방법
profile
성장하려고 분투 중인 개발자

0개의 댓글