알쓸전컴(알아두면 쓸모있는 전자 컴퓨터)
dajngo Template 에서 하드코딩된 URL 을 제거 본문
Template 에서 하드코딩된 URL 을 제거
코딩을 하다보면 템플릿에 아래와 같은 코드를 사용했을때에
<li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
/polls/ 의 url 경로가 바뀌면 /polls/ 의 경로가 들어간 템플릿을 모두 찾아 url 변경을 해줘야 합니다.
적을때는 문제가 안되지만 프로젝트 규모가 커지고 소스 량이 많아질때는 대단히 공수가 많이 들어가는 작업 입니다.
그래서
<li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>
이런식으로 바꿔 쓸수가 있습니다.
url 'detail' 은
polls/urls.py
from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.index, name='index'), # ex: /polls/5/ url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'), # ex: /polls/5/results/ url(r'^(?P<question_id>[0-9]+)/results/$', views.results, name='results'), # ex: /polls/5/vote/ url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, name='vote'), ]
여기에서 url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'), 에서 가지고 오게 됩니다.
나중에 url 변경은 polls/urls.py 에서만 해주면 모두 일괄적으로 바뀌게 되니 코딩이 훨씬 편해 질수 있습니다.
URL 의 이름공간(namespace) 나누기
추후에 app이 많이 지면 이러한 name='detail' 이 중복 되고 관리가 어려워 질수 있습니다.
그래서 파이썬에서는 아래와 같이 사용하는것이 있습니다.
polls/urls.py
from django.conf.urls import url from . import views app_name = 'polls' urlpatterns = [ url(r'^$', views.index, name='index'), url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'), url(r'^(?P<question_id>[0-9]+)/results/$', views.results, name='results'), url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, name='vote'), ]
app_name = 'polls' 을 추가 해 줍니다.
<li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>
▼
<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>
같이 사용할수 있습니다.
'Web > Django' 카테고리의 다른 글
django HttpResponseRedirect 하기 (0) | 2017.08.14 |
---|---|
django 간단한 폼 만들기 (0) | 2017.08.12 |
Template 시스템 사용하기 (0) | 2017.08.12 |
django 404 에러 일으키기 (0) | 2017.08.12 |
django view와 template 연동하기 (0) | 2017.08.12 |