백엔드

<장고 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 %}