일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- python
- while
- Django
- notion
- pycharm
- match case
- group_by()
- vs code
- sqldf
- 동일성 연산자
- inflearn
- summarise()
- f-string
- input함수
- sd()
- 점프투장고
- javascript
- 자료형
- mutate()
- 반복문
- Swift
- ReactNative
- R 데이터 분석
- COUNT()
- 소수출력
- react
- 조건문
- 멤버십 연산자
- 제어문
- 별찍기
- Today
- Total
✏️
02-5 URL 더 똑똑하게 사용하기 본문
템플릿에서 사용한 URL 하드 코딩을 없애는 방법을 알아보자.
URL 하드 코딩이란?
question_list.html 템플릿에 사용된 href값을 보자.
"/pybo/{{ question.id }} => 질문 상세를 위한 URL 규칙.
이런 URL규칙은 프로그램을 수정하면서 '/pybo/question/2/' 또는 '/pybo/2/question/'으로 수정될 가능성이 있다.
이런 식으로 URL규칙이 자주 변경된다면 템플릿에 사용된 모든 href값들을 일일이 찾아 수정해야 한다.
URL 하드 코딩의 한계인 셈이다.
이런 문제를 해결하려면 해당 URL에 대한 실제 주소가 아닌 주소가 매핑된 URL별칭을 사용해야 한다.
URL 별칭으로 URL 하드 코딩 문제 해결하기
URL 별칭을 파이보에 적용해보자
01단계 pybo/urls.py 수정하여 URL 별칭 사용하기
템플릿의 href 실제 주소가 아니라 URL 별칭을 사용하려면 우선 pybo/urls.py 파일을 수정해야 한다.
path 함수에 있는 URL 매핑에 name 속성을 부여하자.
/pybo/는 index라는 별칭이, /pybo/2/는 detail이라는 URL 별칭이 생긴다.
02단계 pybo/question_list.html 템플릿에서 URL 별칭 사용하기
1단계에서 만든 별칭을 템플릿에서 사용하기 위해 pybo/question_list.html 파일을 수정하자.
/pybo/{{ question.id }} 를 {% url 'detail' question.id %} 로 변경했다.
URL 네임스페이스 알아보기
현재의 프로젝트에서는 pybo 앱 하나만 사용하지만, 이후 pybo 앱 이외의 다른 앱이 프로젝트에 추가될 수도 있다.
이때 서로 다른 앱에서 같은 URL 별칭을 사용하면 중복 문제가 생긴다.
이 문제를 해결하려면 pybo/urls.py 파일에 네임스페이스(namespace)라는 개념을 도입해야 한다.
네임스페이스 = 각각의 앱이 관리하는 독립된 이름 공간.
01단계 pybo/urls.py에 네임스페이스 추가하기.
pybo/urls.py 파일에 네임스페이스를 추가하려면 app_name 변수에 네임스페이스 이름을 저장하면 된다.
네임스페이스 이름으로 'pybo'를 저장했다.
02단계 네임스페이스 테스트하기 - 오류 발생!
pybo에 접속해보면 다음과 같은 오류가 발생한다.
03단계 pybo/question_list.html 수정하기
2단계에서 오류가 발생한 이유는 템플릿에서 아직 네임스페이스를 사용하고 있지 않기 때문이다.
{% url 'detail' question.id %} 를 {% url 'pybo:detail' question.id %} 으로 변경.
detail에 pybo라는 네임스페이스를 붙여준 것이다.
'ETC. > Do it! 점프 투 장고' 카테고리의 다른 글
02-6 답변 등록 기능 만들기 (0) | 2022.10.13 |
---|---|
02-4 질문 목록과 질문 상세 기능 구현하기 (0) | 2022.10.13 |
02-3 개발 편의를 제공하는 장고 Admin (0) | 2022.10.12 |
02-2 데이터를 관리하는 모델 (0) | 2022.10.12 |
02-1 주소와 화면을 연결하는 URL과 뷰 (0) | 2022.10.10 |