반응형
Django - 장고 URL 매핑 개념 및 예제 (URL에 따른 화면 띄우기)
목차
- 장고 URL 매핑이란?
- URL 매핑 예제
- urlpatterns에 name 속성 사용하기
- 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>
반응형
'IT 개발 > Django' 카테고리의 다른 글
[Django] 장고, 데이터 전달 방법 (Path Parameter vs Query Parameter) (1) | 2023.12.28 |
---|---|
[Django] 장고, 뷰 반환타입 종류 (return type) (0) | 2023.12.27 |
[Django] 장고 웹 화면 보여주기 (view와 template 연결) (0) | 2023.12.26 |
[Django] 장고에서 데이터베이스 연동하여 사용하기 (MySQL, mariaDB) (0) | 2023.12.24 |
[Django] 장고 설치 및 사용방법 (프로젝트 생성, 앱 생성, 환경설정) (0) | 2023.12.21 |