당신은 멋쟁이, 우리는 장고쟁이~

0%

Writing your first Django app, part3 - 6편

템플릿에서 하드 코드된 코드 제거하기



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
2
3
4
5
6
7
8
9
10
11
12
<li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>


# 참고 polls/urls.py

urlpatterns = [
path("", views.index, name='index'),
path('<int:question_id>/', views.detail, name='detail'),
# 위 a 태그 안에 'detail' 을 지정함
path('<int:question_id>/results/', views.results, name='results'),
path('<int:question_id>/vote/', views.vote, name='vote'),
]


1
2
3
4
5
 {% url %} 태그 안에,  'detail' 이름을 가진 url 주소를 정의하고, 
question.id 라는 인자를 넣어주었습니다.


이러한 방식으로, polls.urls 모듈에 있는 URL 정의를 조회하여 <a> 태그가 작업을 수행 합니다.

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 을 짓고.

이 이름을 템플릿에서 사용할수 있습니다.