본문으로 바로가기

 

https://docs.djangoproject.com/en/3.0/topics/http/urls/

 

URL dispatcher | Django documentation | Django

The Django Software Foundation deeply values the diversity of our developers, users, and community. We are distraught by the suffering, oppression, and systemic racism the Black community faces every day. We can no longer remain silent. In silence, we are

docs.djangoproject.com

다음과 같은 코드는 /1 만 렌더링한다.

urlpatterns = [
    path("1", room_views.room_detail, name="detail"),
]

 

만약 url 부분을 동적으로 받고 싶다면 다음과 같이 작성합니다

 

🚨 주의 <int: pk> 처럼 띄어 쓰지 마세요. 띄어쓰면 url에서도 공백을 줘야 합니다.

<int:pk>처럼 꼼꼼히 붙여 쓰세요 ㅜ

urlpatterns = [
    path("<int:pk>", room_views.room_detail, name="detail"),
]

 

뷰에는 동적으로 들어가는 url의 요소를 넣어줘야 합니다.

pk라는 정수 형태의 값을 url에 등로했으니 pk로 가져오면 됩니다.

def room_detail(request, pk):
    print(pk)
    return render(request, "rooms/detail.html")

 

rooms/detail.html에 pk를 넘겨줘서 관련된 정보를 출력하도록 템플릿을 수정하는 등 여러 방면으로 이용하면 됩니다.


 

namespace와 name 활용

 

지금까지 앱 수준의 urls.py에는 name, config 수준의 urls.py에는 namespace를 꼬박꼬박 주어왔다.

 

# rooms/urls.py
urlpatterns = [
    path("<int:pk>", room_views.room_detail, name="detail"),
]
# config/urls.py
urlpatterns = [
    path("", include("core.urls", namespace="core"),),
    path("rooms/", include("rooms.urls", namespace="rooms")),
    path("admin/", admin.site.urls),
]

 

왜? 그 이유는 다음과 같다.

 

일반적으로 렌더하는 곳에서는 다음과 같이 href의 주소 링크를 기억해야만 했다.

"rooms/<int:pk>로 url을 받을 때 다음 템플릿을 렌더하기로 했으니 a태그의 link를 다음과 같이 경로를 줘야겠구나."

{% for room in rooms%}
  <h3>
    <a href="/rooms/{{room.pk}}">
      {{room.name}} / ${{room.price}}
    </a>
  </h3>
{%endfor%} 

 

그러나 namespace와 name을 조합하면 다음과 같이 {% url "namespace:name" arguments %} 를 통해 쉽게 렌더링할 수 있다.

{% for room in rooms%}
  <h3>
    <a href="{% url "rooms:detail" room.pk %}">
      {{room.name}} / ${{room.price}}
    </a>
  </h3>
{%endfor%} 

 

home의 경우 다음과 같이 할 수 있을 것이다.

<a href="{% url "core:home" %}">Airbnb</a>

 


darren, dev blog
블로그 이미지 DarrenKwonDev 님의 블로그
VISITOR 오늘 / 전체