템플릿에서 하드 코드된 코드 제거하기
polls/index.html 템플릿에서 question 에 연결된 링크를 기억해야 합니다.
해당 링크는 부분적으로 아래와 같이 하드 코드 되어 있습니다.
1 | <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li> |
하드 코드된 코드들의 문제점은,
템플릿 수가 많아질때, URL 들을 바꾸는것이 굉장히 어려워 진다는 점입니다.
하지만 path() 함수내 polls.urls 모듈에 대한 인자를 정의 하여, 특정 URL에 대한 의존도를 없앨수 있습니다.
1 | {% url %} 템플릿 테그를 사용해서 이 작업을 수행합니다. |
polls/index.html 의 코드를 아래와 같이 바꿔줍니다.
1 | <li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li> |
1 | {% url %} 태그 안에, 'detail' 이름을 가진 url 주소를 정의하고, |
polls/specifics/12/ 같이
detail view 를 보여주는 URL 주소명을 다른것으로 바꾸고 싶을때에는,
이전에는 polls/index.html 의 a 태그를 바꾸어 줬어야 했겟지만,
이제는 polls/urls.py 파일에 name=’detail’ 을 가진 path 를
아래와 같이 고쳐주면 됩니다.
1 | path('specifics/<int:question_id>/', views.detail, name='detail'), |
실험을 해보기 위해서, 브라우저에서 http://127.0.0.1:8000/polls/ 로 접속합니다.
What’s up? 질문이 화면에 출력이 됩니다.
이 What’s up? 을 클릭하면, polls/urls.py 에 있는 detail 뷰가 호출이 되고,
아래 path() 를 참조하여, url을 찾아가고, detial 뷰가 실행 됩니다.
1 | path('specifics/<int:question_id>/', views.detail, name='detail'), |
브라우저에서 http://127.0.0.1:8000/polls/specifics/1/ 로 이동하게 됩니다.
그리고, 화면에 What’s up? 질문에 딸린 choice 들이 표시가 되겠죠.
마치며..
urls.py 파일안에 path() 함수 안에 URL name 을 짓고.
이 이름을 템플릿에서 사용할수 있습니다.