기본적으로 처음 프로젝트를 시작할 때는
python3 -m venv myvenv
source myvenv/bin/activate
pip3 install django
pip3 freeze
django-admin startproject practice_url
cd practice_url
python3 manage.py startapp myapp
1) myvenv라는 가상환경을 만들고
2) 그 가상환경을 실행하고
3) 그 가상환경 안에 django를 설치하고
4) 설치된 패키지들의 버전을 확인하고
5) practice_url 이라는 프로젝트를 만들고
6) 그 프로젝트 안으로 들어가
7) myapp이라는 어플리케이션을 생성했다.
어플리케이션을 만들었으므로 settings.py에 들어가
INSTALLED_APPS 리스트에 myapp을 추가해야 한다.
여기서 어플리케이션을 추가하고 쉼표 까먹어서 에러 나는 일이 없도록 해야 한다. 은근 자주 발생하는 오류라.
이후 Myapp에 templates라는 폴더를 추가하고 안에 html 파일을 넣는다. 여기에서는 first.html 파일을 넣었다.
실제로 이 first.html이 나타나도록 해야 하므로 Myapp 어플리케이션의 views.py에 들어가서 first함수를 추가해 준다.
참고로 여기서 Render는 first.html을 화면에 찍어내라는 뜻.
def first(request) :
return render(request, 'first.html')
다음으로는 라우팅을 해 주어야 한다.
전체 urls.py에 다음과 같이 적어준다.
from myapp import views
또한, myapp에 있는 views에 들어 있는 first함수가 작동하도록 경로를 추가해 준다.
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.first)
]
second.html 문서에는 a태그로 first.html로의 이동을 지원
<a href="/">to first page</a>
fisrt.html 문서에도 a태그로 second.html로의 이동을 지원
<a href="/second">to second page</a>
그런데 이런식으로 라우팅을 진행하면 너무 비효율적이다.
계층적으로 이루어진 Url을 한꺼번에 다루는 방법이 있다.
그럴 때는 django.urls 에 있는 include를 써볼 수 있다.
따라서 우선적으로 path 옆에 include를 추가해 준다.
from django.urls import path, include
일단 좀 큰 사이트를 제작할 때를 예시로 들고 있으므로 몇 가지 app을 추가적으로 생성하였다.
python3 manage.py startapp product
python3 manage.py startapp board
당연히 자동적으로 settings.py에 애플리케이션 등록 해줘야.
이 다음부터가 이제까지와는 조금 다른데,
board라는 새 어플리케이션 안에 인위적으로 urls.py를 만들어 준다.
그리고 practice_url. 그러니까 전체 urls.py 파일로 돌아와서
include를 활용하여 라우팅을 진행한다.
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.first),
path('second/', views.second),
path('products/', include('product.urls')),
path('boards/', include('board.urls')),
]
이것이 무슨 의미냐 하면
앞으로 다음과 같이 products/류는 모두 products app 안에 자체적으로 만든 urls.py에서 관리하겠다는 의미이다.
127.0.0.1:8000/products/1
127.0.0.1:8000/products/2
127.0.0.1:8000/products/3
boards/ 도 마찬가지이다.
127.0.0.1:8000/boards/1
127.0.0.1:8000/boards/2
127.0.0.1:8000/boards/3
이제 board app에 자체적으로 생성한 urls.py로 들어간 다음
필요한 것들만 추려서 import를 하고 path를 추가연결한다.
from django.urls import path
from board import views
urlpatterns = [
path('', views.board),
]
최종적으로 이러한 상황이 만들어졌다면.
python3 manage.py runserver
라고 입력했을 때, 입력하는 주소에 따라 다음과 같이 구현되어야 정상이다.
일단 주소를 입력하자마자는 아무것도 없을테니 아래와 같은 페이지가.
to second page를 누르면
products를 입력하면
boards를 입력하면
127.0.0.1:8000/products/first/
를 입력하면
이런 식으로 구현이 된다.
include로 관리하는 것 말고, 자동으로 url을 생성하는 방법도 있다고 하니 일단은 include로 application 내에서 url을 관리하는 방법을 배웠다고 생각하면 될 듯 하다.