[URL 하드 코딩]
question_list.html 템플릿에 사용된 다음 링크를 보자.
질문 상세를 위한 URL 링크이다. 하지만 이러한 URL 링크는 수정될 가능성이 있다. 예를 들어 http://localhost:8000/pybo/question/2 또는 http://localhost:8000/pybo/2/question 처럼 바뀔수 있다. 실제 프로젝트에서 이러한 URL 리팩토링은 빈번하게 발생한다. URL 링크가 자주 변경된다면 템플릿에서 사용한 모든 URL 들을 일일이 찾아가며 수정해야 하는 리스크가 발생한다. 이러한 문제점을 해결하기 위해서는 해당 URL에 대한 실제 링크 대신 링크의 주소가 1:1 매핑되어 있는 별칭을 사용해야 한다.
링크의 주소 대신 별칭을 사용하려면 URL 매핑에 name 속성을 부여해야한다. pybbo/urls.py 파일을 수정하자.
http://localhost:8000/pybo/ URL 은 index 별칭을 부여했고,
http://localhost:8000/pybo/2 와 같은 URL 은 detail 이라는 별칭을 부여했다는 뜻이다.
이렇게 별칭을 추가하면 템플릿에서 다음처럼 사용할 수 있다.
하드코딩 되어 있던 /pybo/{{ question.id }} 링크를 {% url 'detail' question.id %} 로 변경했다. 여기서 question.id 는 URL매핑에 정의된 <int:question_id>에 전달해야 하는 값을 의미한다.
현재는 pybo 앱 하나만 사용중이지만 pybo 앱 외에 다른 앱이 프로젝트에 추가 될 경우 서로 다른 앱에서 동일한 URL 별칭을 사용하면 중복이 발생한다. 이 문제를 해결하려면 pybo/urls.py파일에 네임스페이스를 의미하는 app_name 변수를 지정해야한다.
app_name 을 pybo 로 설정했다. 그런데 이렇게 수정하고 http://localhost:8000/pybo/ 에 접속하면
이런 오류가 발생한다. 이 오류는 네임스페이스를 추가했기 때문이다. 이 오류를 해결하려면 템플릿에서 사용한 URL 별칭에 네임스페이스를 다음과 같이 지정해야한다.
detail 앞에 pybo 라는 네임스페이스를 붙여준 것이다.
'Django > 따라하는 장고' 카테고리의 다른 글
11. 스태틱 디렉토리 (0) | 2022.10.25 |
---|---|
10. 답변 등록하기 (0) | 2022.10.22 |
8. 템플릿 (1) | 2022.10.19 |
7. 장고 관리자 (1) | 2022.10.17 |
6. 모델 사용법 (0) | 2022.10.13 |