본문 바로가기
IT

[프로그래밍] Chap 2. 장고 기본 요소 학습#5 (URL 네임스페이스)

by 밤고래 2021. 5. 29.
반응형

안녕하세요. 밤고래에요 :)

오늘은 URL을 더 똑똑하게 사용하는 방법에 대해 다룰 예정입니다.

특히, 템플릿에서 사용한 URL 하드 코딩을 없애는 방법에 대해 알아보겠습니다.

 

 

 

2-5 URL 더 똑똑하게 사용하기

question_list.html 에서 사용된 href 값을 보자.

 

 

"pybo/{{ question.id }}/"는 질문 상세를 위한 URL 규칙이다. 

하지만 이런 URL 규칙은 프로그램을 수정하면서

'/pybo/question/2/' 또는 '/pybo/2/question/'으로 수정될 가능성도 있다.

이런 식으로 URL 규칙이 자주 변경된다면 템플릿에 사용된 모든 href 값들을 일일이 찾아 수정해야 한다.

이런 문제를 해결하려면 해당 URL에 대한 실제 주소가 아닌 주소가 매핑된 URL 별칭을 사용해야 한다.

 

 

 

[실습] URL 별칭으로 URL 하드 코딩 문제 해결하기(p87)

파이보에 URL 별칭을 적용해보자

 

Step 1. pybo/urls.py 수정하여 URL 별칭 사용하기

별칭을 사용하려면 우선 pybo/urls.py 파일을 수정해야한다. path 함수에 있는 URL 매핑에 name 속성을 부여하자.

 

 

이렇게 수정하면 실제 주소 /pybo/는 index라는 URL 별칭이, /pybo/2/는 detail이라는 URL 별칭이 생긴다. 

 

Step 2. pybo/quesiton_list.html 템플릿에서 URL 별칭 사용하기

1단계에서 만든 별칭을 템플릿에서 사용하기 위해 /pybo/{{ question.id }} 를 {% url 'detail' question.id %}로 변경하자.

 

 

여기서는 템플릿 태그로 변환되어 url이 detail인 별칭을 가진 것 중 입력된 id 값의 객체로 이동한다를 의미한다.

 

[실습] URL 네임스페이스 알아보기(p88)

서로 다른 앱(ex-pybo)에서 같은 URL 별칭을 사용하면 중복 문제가 생긴다.

이 문제를 해결하려면 pybo/urls.py 파일에 네임스페이스라는 개념을 도입해야 한다.

네임스페이스는 쉽게 말해 각각의 앱이 관리하는 독립된 이름 공간을 말한다. 

 

Step 1. pybo/urls.py에 네임스페이스 추가하기

app_name 변수에 네임스페이스 이름을 저장하면 된다. 

 

네임스페이스 이름으로 pybo를 저장했다. 

 

Step 2. 네임스페이스 테스트하기 - 오류 발생!

/pybo/에 접속해보자. 그러면 다음과 같은 오류가 발생한다.

 

 

Step 3. pybo/question_list.html 수정하기

오류가 발생한 이유는 템플릿에서 아직 네임스페이스를 사용하고 있지 않기 때문이다. 

<a href="{% url 'pybo:detail' question.id %}">와 같이 pybo:를 추가해주자.

 

 

 

여기까지가 장고에서 URL 네임스페이스를 활용한 방법이었습니다.

다음 번에는 파이보 게시판앱에서 답변등록 기능 만들기를 진행하겠습니다 :)

반응형

댓글