반응형

 

Django - 장고 URL 매핑 개념 및 예제 (URL에 따른 화면 띄우기)

 

 

   목차

  1. 장고 URL 매핑이란? 
  2. URL 매핑 예제
  3. urlpatterns에 name 속성 사용하기
  4. urlpatterns에 name 속성 + namespace 사용하기

 

 

1. 장고 URL 매핑이란?

 

사용자가 요청한 URL 주소에 따라 웹페이지를 띄워주기 위해서는, 서버에서 URL 주소에 따른 뷰 정보를 가지고 있어야 하는데 이러한 작업을 URL 매핑이라고 합니다. 

 

이를 위해서 장고에서는 config > urls.py 파일의 urlpatterns = [ ] 안에 url 매핑 정보를 입력해 주면 됩니다. 

만약, 여러개의 앱을 만들어 사용하게 될 때는 config > urls.py 파일안에 각 앱의 urls.py파일을 include하여 사용할 수도 있습니다. 이때 각 앱의 urls.py 파일은 각 앱 폴더안에 새롭게 생성하여 작성해 주셔야 합니다. 

 

아래 예제를 살펴보면 사용법을 직관적으로 알 수 있습니다. 

 

 

 

2. URL 매핑 예제

 

cf) 앱 이름 : testapp

 

1) (뷰) : testapp > view.py

from django.shortcuts import render
from django.http import HttpResponse
from .models import TestTb

def home(request):
    return HttpResponse("<h1>Home화면</h1>")

def index1(request):
    return HttpResponse("<h1>index1 화면</h1>")

def index2(request):
    return HttpResponse("<h1>index2 화면</h1>")

 

2) (매핑정보) : config > urls.py

from django.contrib import admin
from django.urls import path, include
from testapp import views

urlpatterns = [
    path("admin/", admin.site.urls),

    path("", views.home),
    path("index1", views.index1),
    path("test/", include('testapp.urls')),
]

 

3) (앱별 매핑정보) : testapp > urls.py

from django.urls import path
from . import views

urlpatterns = [
    path("index2", views.index2)
]

 

[실행결과]

 

 

 

3. urlpatterns에 name 속성 사용하기

 

urls.py 파일에서 urlpatterns에 name 속성을 지정하면 url을 해당 별칭으로 대체하여 사용할 수 있습니다. 

 

1) view.py

def show(request):

    year = request.GET.get('year')
    name = request.GET.get('name')

    return render(request, "testapp/show.html", {'year':year, 'name':name})

 

2) urls.py

  • config > urls.py
  • config > testapp > urls.py  (urlpatterns에 name='show_name' 속성 지정)
# config > urls.py
urlpatterns = [
    path("testapp/", include('testapp.urls')),
]

# config > testapp > urls.py
urlpatterns = [
    path("show", views.show, name='show_name')
]

 

3) show.html

  • action="testapp/show" 대신 action="{% url 'show_name' %}" 로 대체하여 사용 가능
<!DOCTYPE html>
<html lang="en">
<head> ... </head>
<body>
     <h3>보내는 데이터</h3>
<!-- <form action="/testapp/show"         method="get"> -->
     <form action="{% url 'show_name' %}" method="get">
         year : <input type="text" name="year"><br>
         name : <input type="text" name="name"><br>
         <button>Send</button>
     </form>
     <hr>
     <h3>받는 데이터</h3>
     year : {{ year }}<br>
     name : {{ name }}<br>
</body>
</html>

 

 

 

4. urlpatterns에 name 속성 + namespace 사용하기

 

urls.py 파일에서 urlpatterns에 name 속성과 함께 namespace를 사용한다면 서로 다른 앱에서 동일한 url 이름을 사용하게 될 경우에도 namespace로 구분하여 사용할 수 있습니다. 

 

1) urls.py

  • config > testapp > urls.py에 app_name = 'testapp' 추가
# config > testapp > urls.py
app_name = 'testapp'
urlpatterns = [
    path("show", views.show, name='show_name')
]

 

2) show.html

  • action="{% url 'testapp:show_name' %}" 와 같이 namespace 이름을 추가해 주어야 합니다. 
<!DOCTYPE html>
<html lang="en">
<head> ... </head>
<body>
     <h3>보내는 데이터</h3>
<!-- <form action="/testapp/show"         method="get"> -->
     <form action="{% url 'testapp:show_name' %}" method="get">
         year : <input type="text" name="year"><br>
         name : <input type="text" name="name"><br>
         <button>Send</button>
     </form>
     <hr>
     <h3>받는 데이터</h3>
     year : {{ year }}<br>
     name : {{ name }}<br>
</body>
</html>

 

 

반응형

+ Recent posts