Python
Python Django 의 views.py 분리 및 urls.py 처리 방법
- 2023.02.22 08:42:26
Python Django를 설치 후 프로젝트 디렉토리 내의 views.py 와 urls.py로 라우팅하여 웹페이지로 띄우게 되는데, 웹페이지의 수가 증가할 수록 코드가 길어져 식별이 어려워지게 된다. 이번 글에서는 views.py를 원하는 디렉토리에 여러개로 분산시키고 urls.py로 라우팅 하는 방법을 안내한다. [!]사전 작업 환경[/!] views.py 와 urls.py 분리 작업에 앞서 현재 구성된 django 프로젝트의 환경을 요약해 본다. - 외부접속주소 : http://py.chanyeongpark.com - project경로 : /home/py/public_html/testproject/ - views.py / urls.py경로 : /home/py/public_html/testproject/testproject/ - app 경로 : /home/py/public_html/testproject/testapp/ 현재 /home/py/public_html/testproject/testproject/ 내에 위치한 views.py를 통해 template과 결합되고, urls.py를 통해 py.chanyeongpark.com 으로 외부 접속시 index 화면이 노출되고 있다. [현재 views.py] [현재 urls.py] [!]project 메인 urls.py 설정[/!] project 의 메인 urls.py 에서 app 디렉토리에 추가로 생성할 urls.py로 라우팅할 수 있도록 설정한다. 프로젝트 설정 폴더로 이동하여 urls.py를 vi로 연다. # cd /home/py/public_html/testproject/testproject
# vi urls.py vi로 urls.py에 아래와 같이 app urls.py로 라우팅해주는 구문을 추가한다. from django.contrib import admin
from django.urls import path, include from . import views urlpatterns = [ path('views/', include('testapp.urls')), path('admin/', admin.site.urls), path('', views.index, name='index'), ] urlpatters 에 path('views/', include('testapp.urls')), 가 추가 되었으며, 접속하는 url이 http://py.chanyeongpark.com/views/* 와 같은 경우 testapp 앱의 urls.py로 이관하게 된다. [!]app 디렉토리에 views.py, urls.py 추가 생성[/!] 프로젝트 urls.py에서 이관 받아 매핑 처리할 views.py와 urls.py를 앱 디렉토리내에 추가 생성하도록 한다. 아래와 같이 앱 디렉토리로 경로 이동 후 views.py 파일들을 몰아 넣을 디렉토리를 하나 만든다. # cd /home/py/public_html/testproject/testapp/
# mkdir views vscode 등에서 작업할 수 있도록 호스팅 user(py) user에게 적절한 권한을 부여한다. # chown -R py.py views
# chmod -R 705 views views 디렉토리로 들어가 새로운 views 파일 ( basic_views.py / test_views.py )을 생성한다. # cd views
# vi basic_views.py
basic_views.py는 아래 내용으로 작성한다. basic_views.py는 http://py.chanyeongpark.com/views/ 로 접속시 화면 출력을 담당한다. from django.shortcuts import render
def index(request): return render(request, 'index.html') test_views.py를 하나 더 만든다. test_views.py는 http://py.chanyeongpark.com/views/test 로 접속시 화면 출력을 담당한다. # vi test_views.py
from django.shortcuts import render
def test(request): return render(request, 'views/test.html') views 파일을 생성 했다면, 그 다음 urls.py 추가 생성을 위해 앱 디렉토리로 이동한다. # cd ../
(또는) # cd /home/py/public_html/testproject/testapp vi 로 urls.py 를 작성한다. # vi urls.py
urls.py 내용은 아래와 같다. from django.urls import path
from .views import basic_views, test_views app_name = 'testapp' urlpatterns = [ path('', basic_views.index, name='index'), path('test', test_views.test, name='test'), ] from .views import basic_views, test_views 는 'app디렉토리 > views' 디렉토리 내의 basic_views.py 와 test_views.py 파일을 import 시키는 구문이다. app_name = 'testapp' 통해 app 이름을 명시한 뒤 urlpatters 를 추가한다. 이 때, http://py.chanyeongpark.com/views/test 로 URL을 매핑을 해야 하는데 '/views' 가 urlpatterns 에 명시되지 않은 이유는, 프로젝트 메인경로의 urls.py 에서 매핑하여 app디렉토리의 urls.py 로 라우팅 해줬기 때문이다. views 파일이 views 디렉토리에 새로 생성 되었으니, app 디렉토리의 기본 views.py는 필요가 없어졌으니 삭제 한다. # rm -rf /home/py/public_html/testproject/testapp/views.py
[!]app 에 template 생성[/!] 앞서 생성한 앱의 views 파일에서 결합된 template 파일 생성을 위해 app의 templates 경로로 이동한다. # cd /home/py/public_html/testproject/testapp/templates
templates 경로에 http://py.chanyeongpark.com/views/ 와 결합될 index.html 템플릿을 생성한다. (경로는 앞서 작성한 basic_views.py 에서 명시한 경로와 일치해야 한다.) # vi index.html
(내용은 'Hello World 1' 로 했다.) 그런 다음, 디렉토리를 하나 더 만들어 http://py.chanyeongpark.com/views/test 와 결합될 템플릿을 하나 더 만든다. (경로는 앞서 작성한 test_views.py 에서 명시한 경로와 일치해야 한다.) # mkdir views
# vi views/test.html (내용은 'Hello World 2' 로 했다.) 현재까지 작성된 파일들의 구조는 아래 화면과 같다. [!]브라우저에서 테스트 해보기[/!] urls.py가 제대로 매핑 되는지 웹브라우저에서 접속해 본다. [http://py.chanyeongpark.com/views/ & http://py.chanyeongpark.com 출력 결과] http://py.chanyeongpark.com 의 경우 프로젝트의 urls.py에서 앱의 urls.py에서 설정한 index와 같은 템플릿 파일로 설정되어 있기 때문에 http://py.chanyeongpark.com/views/ 와 같은 화면을 호출하고 있다. [http://py.chanyeongpark.com/views/test 출력 결과] |