# 프로젝트명/urls.py
...
from django.contrib import admin
from django.urls import path
from django.conf.urls import include # 새로 추가
import blogPosts(앱이름).views
urlpatterns = [
path('admin/', admin.site.urls),
path('', blogPosts.views.index, name='index'),
path('posts/', include('blogPosts(앱이름).urls')), # 항상 끝에도 쉼표를 붙여 줍시다 <<<< 이부분!!!!
]
include() 함수는 다른 URLconf 들을 참조할 수 있도록 도와줍니다. Django 가 함수 include() 를 만나게 되면, URL의 그 시점까지 일치하는 부분을 잘라내고, 남은 문자열 부분을 후속 처리를 위해 include 된 URLconf 로 전달합니다.
예를 들어, localhost:8000/posts/4/delete/
로 접속했다면, 프로젝트명/urls.py
에서 posts/
까지 확인한 후에 include
를 통해 blogPosts(앱이름).urls
로 넘어가게 되고, 여기서 나머지 4/delete/
라는 경로에 매칭되는 path
함수를 찾게 됩니다!
# blogPosts(앱이름)/urls.py
from django.urls import path
from blogPosts import views
urlpatterns = [
path('', views.index, name='index'), # 'localhost:8000/posts/'
]
# blogPosts/urls.py
...
app_name = 'blogPosts'
urlpatterns = [
...
path('<int:id>/', views.show, name='show'),
# path를 불러온 후, <converter:name> 형태로 사용
]
# blogPosts/views.py
...
def show(request, id):
post = Post.objects.get(id=id)
return render(request, 'blogPosts/show.html', {'post':post})
이때
template에서 url pattern name을 사용할 때 인자를 넘겨줘야 할 필요가 있을 때도 있는데요, 그럴 경우 name 뒤에 인자로 들어갈 변수의 값을 입력해줍니다.
이 때 변수만 써주게 되면 url에 필요한 인자에 순차적으로 변수가 할당되게 되며, 혹은 명시적으로 인자마다 변수를 할당해 줄 수도 있습니다.({% url 'blogPosts:show' id=post.id %}
처럼요)
만약 여러 개의 인자가 필요하다면 같은 방식으로 쓰되, 스페이스로 변수들을 구분합니다! 다른 예시를 보고 싶다면