www.youtube.com/watch?v=HhjnQIpXqPc&list=PL-51WBLyFTg2vW-_6XBoUpE7vpmoR3ztO&index=9
www.youtube.com/watch?v=HsyPaQ_B8kY&list=PL-51WBLyFTg2vW-_6XBoUpE7vpmoR3ztO&index=10
이 포스팅은 다음과 같은 youtube 영상을 따라하면서 배운 내용과 학습 내용을 담은 것이다:
- Dennis Ivy - Dynamic URL Routing & Templates | Django Framework (3.0) Crash Course Tutorials (pt 9 / 9.5)
현재 Django Version 3.1.2 를 쓰고 있다. Django는 파이썬을 쓰는 오픈소스 웹 프레임워크이다. 웹사이트 만들때 주로 쓰며, 간단한 것이 큰 특징이다.
※ Dynamic URL Routing
흔히들 가끔씩 다음과 같은 경우를 겪은 적 있을 것이다. 한 페이지에서 다른 페이지로 넘어갈 때 위에 존재하는 숫자 하나만 바뀌는 것을 본 경우가 있을 것이다.
위의 사진과 같은 경우 말이다. 위와 같은 경우에는 customer에 해당되는 1, 2번의 customer로 유저를 direct 하는 것이다. 이런 것을 우리도 한번 구현해보려고 한다.
일단, views.py를 다음과 같이 변경시킨다:
# views.py
from django.shortcuts import render
from django.http import HttpResponse
from .models import *
def home(request):
return render(request, 'accounts/dashboard.html')
def products(request):
products = Product.objects.all()
return render(request, 'accounts/products.html', {'products': products})
def customer(request, pk_customer):
customer = Customer.objects.get(id=pk_customer)
context = {'customer':customer}
return render(request, 'accounts/customer.html', context)
그리고 urls.py를 다음과 같이 변경시킨다:
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name="home"),
path('products/', views.products, name='products'),
path('customer/<str:pk_customer>/', views.customer, name='customer'),
]
이렇게 되면 이제 customer/ 뒤에 views.py의 pk_customer의 값을 입력해도 정상적으로 웹사이트를 불러온다. (pk 는 primary key의 약자이다) 위에 소개한것 처럼 ...customer/1, customer/2 값을 입력하면 그 id 값에 알맞는 customer에 대한 웹사이트를 불러온다. (이를 하기 위해서는 어떤 customer이 어떤 id 값을 가지고 있는지 알고 있어야 편하다.)
이렇게 path 정하는 것은 Django URL Documentation에서 간략히 설명되어 있다.
또한, 위의 변경된 urls.py에 보면 name="home", name="products", name="customer"와 같은 값은, templates에서 다음과 같이 쓰인다.
# navbar.html
{% load static %}
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<image src="{% static '/images/logo.png' %}">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item active">
<a class="nav-link" href="{% url 'home' %}">Dashboard</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'products' %}">Products</a>
</li>
</ul>
</div>
</nav>
중간에 보면 href에 {% url 'home' %} 그리고 {% url 'products' }라고 쓰인 부분이 있다. 이는 이제 저 Dashboard라는 것을 클릭하면, urls.py에 나와있는 name='home'인 부분과 name='products'으로 direct가 돼서 views.home function을 불러일으킨다. 이렇게 간단한 방식을 사용하면, path의 실제 url 값이 어떻게 변하는지와는 상관 없이 간단하게 url routing을 할 수 있다.