Django : URLs

김재훈·2024년 3월 14일

Django

목록 보기
3/15

Django URLs

  • 요청과 응답에서 Django URLs의 역할
    • URL : Uniform Resource Loactor
    • 웹에 게시된 리소스를 검색하기 위해 브라우저에서 사용하는 메커니즘

App URL mapping

  • 각 앱에 URL을 정의하는 것
    • 프로젝트와 각 앱이 URL을 나누어 관리를 편하게 하기 위함
  • 2번째 앱 pages 생성 후 발생할 수 있는 문제
    • view 함수 이름이 같거나 같은 패턴의 URL 주소를 사용하게 되는 경우
    • 아래 코드와 같이 해결해 볼 수 있으나 더 좋은 방법이 필요
    • "URL을 각자 app에서 관리하자"


include

  • 프로젝트 내부 앱들의 URL을 참조할 수 있도록 매핑하는 함수
    • URL의 일치하는 부분까지 잘라내고, 남은 문자열 부분은 후속 처리를 위해 include된 URL로 전달

Naming URL patterns (URL 이름 지정)

  • URL에 이름일 지정하는 것
    (path 함수의 name 인자를 정의해서 사용)
  • 기존 'articles/' 주소가 'articles/index/'로 변경됨에 따라 해당 주소를 사용하는 모든 위치를 찾아가 변경해야 함
    • URL에 이름을 지정하여 관리
  • a 태그의 href 속성값 뿐만 아니라 form의 action 속성처럼 url을 작성하는 모든 위치에서 변경
  • /url 주소/ > {% url 'url name' %}
  • URL 이름 지정 후
    • aritcles 앱의 url 이름과 pages 앱의 url 이름이 같은 상황
    • 단순히 이름만으로는 완벽하게 분리할 수 없음
    • 이름에 key(app_name)을 붙임

'app_name' 속성 지정

  • app_name 변수값 설정
  • {% url 'name' %}
    > {% url 'app_name:name' %}

URL dispatcher

(운항 관리자, 분배기)

  • URL 패턴을 정의하고 해당 패턴이 일치하는 요청을 처리할 view 함수를 연결(매핑)
  • 현재 URL 관리의 문제점
    • 템플릿의 많은 부분이 중복되고, URL의 일부만 변경되는 상황이라면 계속해서 비슷한 URL과 템플릿을 작성해 나가야 할까?

Variable Routing

  • URL 일부에 변수를 포함시키는 것
    (변수는 view 함수의 인자로 전달할 수 있음)

  • 작성법
    <path_converter:variable_name>

  • Variable Routing에 Naming URL patterns를 사용하려면?

    • {% url "articles:dinner" 변수1 변수2 %}

Patch converters

  • URL 변수의 타입을 지정
    (str, int 등 5가지 타입 지원)

Trailing Slashes

  • Django는 URL 끝에 '/'가 없다면 자동으로 붙임
  • "기술적인 측면에서, foo.com/bar와 foo.com/bar/는 서로 다른 ULR"
    • 검색 엔진 로봇이나 웹 트래픽 분석 도구에서는 이 두 주소를 서로 다른 페이지로 보기 때문
  • 그래서 Django는 검색 엔진이 혼동하지 않게 하기 위해 무조건 붙이는 것을 선택한 것
  • 그러나 모든 프레임워크가 이렇게 동작하는 것은 아님

0개의 댓글