[django] 점프 투 장고 - 장고 기초 5

Joy·2020년 6월 17일
0

Django | 점프투장고

목록 보기
7/22

URL과 네임스페이스

템플릿에서 사용된 URL의 하드코딩을 없애는 방법


URL 하드코딩

URL 규칙이 자주 변경된다면 템플릿들에서 사용된 모든 URL들을 일일이 찾아가며 수정해 주어야 하는 리스크가 발생. 이러한 문제점을 해결하기 위해서는 해당 URL에 대한 실제 링크대신 링크의 주소가 매핑되어 있는 별칭을 사용해야 한다.

URL 별칭

URL 매핑에 name속성을 부여해 주기

[C:\projects\mysite\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\mysite\templates\pybo\question_list.html]


    {% for question in question_list %}
        <li><a href="{% url 'detail' question.id %}">{{ question.subject }}</a></li>
    {% endfor %}

<li><a href="/pybo/{{ question.id }}/">{{ question.subject }}</a></li> 이 위와 같이 수정됨.

URL 네임스페이스

pybo앱 이외의 다른 앱이 프로젝트에 추가될 경우 서로 다른 앱에서 동일한 URL 별칭을 사용한다면 중복이 발생하게 될 것이다.
이 문제를 해결하려면 pybo/urls.py 파일에 네임스페이스에 해당되는 app_name 변수를 지정해야한다.

  • pybo/urls.py 파일에 app_name을 설정

 [C:\projects\mysite\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'),
]



  • 템플릿에서 사용된 URL에 네임스페이스를 지정
[C:\projects\mysite\templates\pybo\question_list.html]

    {% for question in question_list %}
        <li><a href="{% url 'pybo:detail' question.id %}">{{ question.subject }}</a></li>
           {% endfor %}

detail 앞에 pybo 라는 네임스페이스를 붙여줌.

profile
roundy

0개의 댓글