이번에는 Django URL 별칭에 대해 정리해볼 것이다.
이전 게시물에서는 템플릿에 다음과 같이 html 코드를 작성했다.
<li><a href="/pybo/{{ question.id }}/">{{ question.subject }}</a></li>
하지만 만약 url 형식을 /pybo/{{ question.id }} 에서 /pybo/question/{{ question.id }} 형식으로 변경해야한다고 하자. 이러한 경우에는 해당 url이 사용된 모든 html 문서를 찾아서 변경해주어야한다.
따라서 이런 문제점을 해결하기 위해 URL 별칭과 네임인터페이스를 사용한다!
1. URL 별칭
URL 별칭을 사용하기 위해선 URL 매핑에 name 속성을 부여해야한다.
/notes/urls.py를 다음과 같이 수정한다.
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('<int:question_id>/', views.detail, name='detail'),
]
urls.py를 수정하였으면, 이제 html에는 이 URL 별칭을 사용하도록 바꿔주어야할 것이다.
이전 게시물에서 작성했던 question_list.html을 다음과 같이 URL 별칭으로 변경한다.
{% 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 %}
하드코딩 되어있던 /notes/{{ question.id }}/ 링크를 {% url 'detail' question.id %}로 변경해주었다.
여기서 question.id는 URL 매핑에 정의된 <int:question_id>에 전달해야하는 값을 의미한다.
2. URL 네임스페이스
만약 notes 이외에 다른 앱을 추가하게 될 경우 이 앱에서도 index와 detail이라는 URL 별칭을 사용하고 싶을 수도 있다. 이때 중복이 발생하는 문제를 해결하기 위해 urls.py에 app_name 변수를 지정한다.
/notes/urls.py 파일에 app_name을 다음과 같이 추가한다.
from django.urls import path
from . import views
app_name = 'notes'
urlpatterns = [
path('', views.index, name='index'),
path('<int:question_id>/', views.detail, name='detail'),
]
그리고 이제 question_list.html 또한 URL 네임인터페이스를 지정해주어야한다.
{% if question_list %}
<ul>
{% for question in question_list %}
<li><a href="{% url 'notes:detail' question.id %}">{{ question.subject }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>질문이 없습니다.</p>
{% endif %}
이렇게 간단하게 URL 별칭과 네임스페이스를 사용해보았다!
'Web > Django' 카테고리의 다른 글
Django(장고) static 디렉터리와 템플릿 상속 및 include 태그 사용 (0) | 2021.08.03 |
---|---|
Django(장고)에서 POST 방식의 데이터 저장 (0) | 2021.08.03 |
Django(장고) 템플릿과 데이터 조회 및 URL 매핑하기 (0) | 2021.08.02 |
Django(장고) 관리자 계정 생성 및 관리자 페이지 사용하기 (0) | 2021.08.02 |
Django ORM을 활용한 모델(model) 생성 및 데이터 처리하기 (0) | 2021.08.01 |