우아한 URL

MoonLight·2021년 8월 18일
0

django

목록 보기
12/20
post-thumbnail

우아한 URL

  • URL을 우리가 원하는 형태로 구성
  • 직관적이고 알아보기 쉬운 구조

이전에 작성한 코드에 이어서 작성함

  1. urls.py에서 chicken 문자열 패턴매칭이 되면 views.chicken으로 연결시킨다.

  1. views.py에서 chicken template을 render하는 chicken view를 만들어준다.

  1. chicken.html에서 template을 작성한다.


  1. localhost:8000/foods/chicken 에 들어가면 아래와 같은 화면이 뜬다.

  1. 원래 href attribute의 value에는 "#" 가 들어가 있었는데 이제는 메뉴 보기를 클릭했을 때 방금 만들어준 상세페이지를 뿌려주기 위해서 /foods/chicken 을 적어준다.

  1. 그럼 /foods/index로 접근하여 메인페이지로 들어가서 메뉴보기 버튼을 누르면 우리가 아까 만들어준 템플릿(/foods/chicken)이 출력된다.

  2. 상세페이지에서 메인페이지로 돌아갈 수 있도록 돌아가기 버튼을 추가해주자.

만약 모든 메뉴에 대해 상세 페이지를 만들어 주어야 한다면 매우 고통스러울 것이다. 아래와 같은 urls patterns에 메뉴를 하나하나 적어넣어야 하기 때문이다. 예를 들어, path('toast/', views.toast), path('noodle/', views.noodle), path('sushi/', views.sushi), path('hamburger/', views.hamburger), ⋯ 생략 ⋯ 이처럼 적어주어야 하는 것은 매우 비효율적인데 이 문제를 극복할 수 있는 방법이 무엇일까?

Django에서는 이러한 URL 문제를 해결할 수 있는 방법이 있다.
장고는 음식처럼 일정한 패턴을 가지고 있는 URL에 대해서 동적 URL을 지원한다. 이러한 처리방식을 우아한 URL이라고 한다.

<str:food>가 동적으로 바뀌는 URL을 변수를 이용하여 처리할 수 있도록 해준다.

설명하자면 menu 다음 경로구분기호(/)를 제외한 모든 URL을 문자열로 보고 변수 foods에 담아서 food_detail 함수를 호출할 때 인수로 넣어준다.

<str:food> 말고도 아래와 같은 것도 있다.
더 자세한 사항은 다음 챕터에서 다뤄보도록 하겠다.

단, 위에서 입력한 변수(<str:food>)를 food_detail에다가 인수로 넘겨주었기 때문에 그 인수를 사용할 수 있도록 food_detail에서 2번째 인수로 food 변수를 추가해주어야 한다.

그리고 받았으면 그 인수를 사전형으로 담아서 view에서 template으로 보내보자.

마지막으로 detail template을 만들어서 받은 사전형 데이터를 사용해보자. 어떻게? 💡 view에서 넘어온 객체를 사용할 때는 템플릿 변수를 사용!!

value는 key로 받아야 하기 때문에 details.html의 위와 같은 템플릿 변수에 {{name}}을 적어준다.
아래는 menu/ 다음의 부분이 <str:food> 변수에 들어가고, 그 변수를 템플릿에서 받아서 그에 따라 다른 문자열을 출력해주는 모습이다.
자동으로 URL에서 값을 가져와 view를 거쳐서 template으로 전달되는 것이다.

profile
hello world :)

0개의 댓글