Django URL 처리

Jwahoon Kim·2021년 7월 6일
0

Django

목록 보기
3/10

url 처리

  • Django에서 처리해야할 url이 많아질 경우 각 App내에서 해당 url을 처리할 수 있도록 만들 수 있다.
# 프로젝트명/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/'
]

url에 변수를 담아보자

# blogPosts/urls.py
...
app_name = 'blogPosts'
urlpatterns = [
    ...
    path('<int:id>/', views.show, name='show'),
    # path를 불러온 후, <converter:name> 형태로 사용
]
  • url에 변수를 담으면 view에서 아래 코드와 같이 변수를 받아 사용 할 수 있다.
# 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 %} 처럼요)

만약 여러 개의 인자가 필요하다면 같은 방식으로 쓰되, 스페이스로 변수들을 구분합니다! 다른 예시를 보고 싶다면

0개의 댓글