https://docs.djangoproject.com/en/3.0/topics/http/urls/
다음과 같은 코드는 /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>
'Django, Flask > 🔫 Django' 카테고리의 다른 글
404 에러 핸들링 (0) | 2020.06.18 |
---|---|
get_absolute_url로 admin panel에서 곧바로 view로 가자 (0) | 2020.06.16 |
Class Based Views(CBV) 근데 generic-display를 곁들인 (0) | 2020.06.16 |
django로 pagination 구현하기 (+ querysets are lazy!) (0) | 2020.06.15 |
url과 view(FBV), django templates (0) | 2020.06.14 |