백엔드
<장고 django> Dynamic URL Routing, 동적 url 라우팅하기
studying develop
2022. 5. 17. 01:40
https://www.youtube.com/watch?v=SZgcwhLTK_k&list=PLEsfXFp6DpzRMby_cSoWTFw8zaMdTEXgL&index=19
urlpatterns = [
path("", home_view), #index/home/root
path('articles/<int:id>/', home_view),
path('admin/', admin.site.urls),
]
urls.py 함수에 위와 같이 articles에 대한 패스를 추가했다.
<int: id>로 올 수 있는 타입을 알려준다.
def home_view(request, *args, **kwargs):
print(args, kwargs)
그리고 *args, **kwargs로 위에서 넘겨준 int에 대한 인자를 받는다.
밑에가 출력.
() {'id': 4}
??? 근데 *arg, **kwargs는 파이썬 문법상 어떻게 표현된 거지?
요약하면 동적 라우팅은 urls.py 파일에서 urlpatterns에 다음과 같이 추가할 수 있는데, 이때 파라미터를 넘길 수 가 있다.
urlpatterns = [
path("", home_view), #index/home/root
path('articles/<int:id>/', views.article_detail_view),
#re_path(r'articles/(?P<id>\d+)$', home_view), #regular expression
path('admin/', admin.site.urls),
]
파라미터를 받도록 설정해준다면 view에서도 마찬가지로 파라미터를 받아야한다.
# Create your views here.
def article_detail_view(request, id=None):
article_obj = None
if id is not None:
article_obj = Article.objects.get(id=id)
context = {
"object": None,
}
return render(request, "articles/detail.html", context={})
id를 받는 형태다.
render(request, "articles/detail.html", context={})로 html을 랜더링한다.
아래가 detail.html 파일이다.
{% extends "base.html" %}
{% block content %}
<h1>{{ object.title }}</h1>
<p>{{ object.content }}</p>
{% endblock content %}