템플릿에서 사용된 URL의 하드코딩을 없애는 방법에 대해서 알아보자.
URL 하드코딩
question_list.html 템플릿에 사용된 다음 링크를 보자.
<li><a href="/pybo/{{ question.id }}/">{{ question.subject }}</a></li>
<a>태그의 href는 하이퍼링크를 의미한다.
링크가 /pybo/{{ question.id }}/ 로 주소가 완전히 다 적혀 있는 것을 하드코딩이라한다.
링크 구조가 수정될 때 일일이 찾아 수정하는 수고를 덜기 위하여 하드코딩은 지양하는게 좋다.
URL 별칭
링크주소 대신 URL 매핑에 name 속성을 부여해 별칭을 사용할 수 있다.
[파일명: C:\projects\yoursite\pybo\urls.py] #라인 수정
from django.urls import path
from . import views
urlpatterns = [
path('', views.index#, name='index'),
path('<int:question_id>/', views.detail#, name='detail'),
]
URL 별칭 사용
[파일명: C:\projects\yoursite\templates\pybo\question_list.html] #라인 수정
{% if question_list %}
<ul>
{% for question in question_list %}
#<li><a href="{% url 'detail' question.id %}">{{ question.subject }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>질문이 없습니다.</p>
{% endif %}
/pybo/{{ question.id }} 를 {% url 'detail' question.id %} 로 변경했음.
question.id 는 URL 매핑에 정의된 <int:question_id>에 전달해야 하는 값
URL 네임스페이스
현재는 pybo앱 하나만 사용중이지만, 이후 다른 앱들이 추가되면서 동일한 URL 별칭을 사용해 중복되는 상황을 방지함.
pybo/urls.py 에서 네임스페이스를 정의하자
[파일명: C:\projects\yoursite\pybo\urls.py] #라인 수정
from django.urls import path
from . import views
#app_name = 'pybo'
urlpatterns = [
path('', views.index, name='index'),
path('<int:question_id>/', views.detail, name='detail'),
]
네임스페이스를 사용해보자
[파일명: C:\projects\yoursite\templates\pybo\question_list.html] #라인 수정
{% if question_list %}
<ul>
{% for question in question_list %}
#<li><a href="{% url 'pybo:detail' question.id %}">{{ question.subject }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>질문이 없습니다.</p>
{% endif %}
네임스페이스 : 별칭 을 사용하자!
'Web > django' 카테고리의 다른 글
[python] 5.django(장고) - 기본요소 조회/템플릿 (0) | 2022.02.14 |
---|---|
[python] 4.django(장고) - 기본요소 admin (0) | 2022.02.12 |
[python] 3.django(장고) - 기본요소 model (0) | 2022.02.12 |
[python] 2.django(장고) - 기본요소 URL/view (0) | 2022.02.12 |
[python] 1.django(장고) - 프로젝트 준비 (0) | 2022.02.12 |