1번째 줄: |
1번째 줄: |
| + | <youtube>https://www.youtube.com/watch?v=sCdpY-gYDLE</youtube> |
| | | |
| ==개요== | | ==개요== |
| 주소를 통해 웹사이트에 들어오게 된다. 이렇게 들어온 주소를 분석하여 특정한 페이지로 연결시켜주어야 한다. 이 연결의 첫번째 관문이 바로 <code>\프로젝트\config\urls.py</code> 이다. | | 주소를 통해 웹사이트에 들어오게 된다. 이렇게 들어온 주소를 분석하여 특정한 페이지로 연결시켜주어야 한다. 이 연결의 첫번째 관문이 바로 <code>\프로젝트\config\urls.py</code> 이다. |
| | | |
− | setting.py의 ROOT_URLCONF 항목을 읽어 urls.py를 불러오고, urlpatterns변수에 지정된 패턴을 찾아 대응시킨다. | + | setting.py의 ROOT_URLCONF 항목을 읽어 urls.py의 경로나 이름을 바꿀 수 있다. |
| ===역할=== | | ===역할=== |
− | 특수한 주소를 받으면, 그 주소에 해당하는 함수를 불러온다.(여기에 해당하는 view를 불러온다.)
| |
| | | |
− | 매핑할 때 추출한 단어들을 뷰에 인자로 넘겨준다. | + | * 특수한 주소를 받으면, 그 주소에 해당하는 함수를 불러온다.(여기에 해당하는 view를 불러온다.) |
| + | * 매핑할 때 추출한 단어들을 뷰에 인자로 넘겨준다. 주소창 안의 <code>~주소/<타입:변수명></code> 형태의 주소를 분석하여 뷰에 인자(타입:변수명)를 전달한다. |
| + | * 매칭되는 뷰가 없다면 에러를 처리하는 뷰를 호출한다. |
| | | |
− | 매칭되는 뷰가 없다면 에러를 처리하는 뷰를 호출한다.
| + | =연결= |
| + | path()함수와 re_path()함수 따위를 통해 URL과 함수(view)를 연결시킨다. |
| + | <syntaxhighlight lang="python"> |
| + | from django.urls import path |
| + | from . import 불러올파이썬파일 # 현재경로에서 불러온다는 의미. |
| | | |
− | 주소창 안의 <code>~주소/<타입:변수명></code> 형태의 주소를 분석하여 뷰에 인자(타입:변수명)를 전달한다.
| + | urlpatterns = [ |
− | | + | path('주소/', 뷰), # 해당 주소로 들어가면 뷰를 실행한다.(뷰는 위에서 import해와야 한다.) |
− | ===사용 가능한 타입===
| + | path('', a) # http://도메인 으로 접속하면 a함수와 연결된다. |
− | {| class="wikitable"
| + | path('test/', test) # http://도메인/test/ 로 접속하면 test 함수와 연결된다. |
− | !type
| + | past(.....) |
− | !설명
| + | .... |
− | |-
| + | ] |
− | |str
| + | </syntaxhighlight> |
− | |/를 제외한 모든 문자열과 매칭됨.(디폴트타입)
| |
− | |-
| |
− | |int
| |
− | |음의 정수를 제외한 0과 양의 정수. 파이썬의 int타입으로 반환되어 view에 전달한다.
| |
− | |-
| |
− | |slug
| |
− | |slug형식의 문자열.(아스키문자나 숫자, 하이픈, _를 포함한 슬러그 문자열과 매칭)
| |
− | |-
| |
− | |uuid
| |
− | |UUID형식의 문자열.
| |
− | |-
| |
− | |path
| |
− | |기본적으로 str과 동일. /를 포함한 모든 문자열과 매치. URL패턴의 전부를 추출할 때 사용.
| |
− | |}ex) path('origin_image/<int:image_id>/', views.show_origin_image, name='origin_image'),
| |
− | *setting.py의 ROOT_URLCONF 항목을 읽어 urls.py를 불러오고, urlpatterns변수에 지정된 패턴을 찾아 대응시킨다.
| |
− | ==어떻게?==
| |
− | path()함수와 re_path()함수 따위를 통해 URL과 함수를 연결시킨다.
| |
| ===path()=== | | ===path()=== |
| route, view 2개의 필수인자와 kwargs, name 2개의 선택인자를 받는다. | | route, view 2개의 필수인자와 kwargs, name 2개의 선택인자를 받는다. |
43번째 줄: |
32번째 줄: |
| <code>path('주소/', 명령(일반적으로 함수를 불러온다), name="인덱스"),</code> 형태로 쓰인다. | | <code>path('주소/', 명령(일반적으로 함수를 불러온다), name="인덱스"),</code> 형태로 쓰인다. |
| {| class="wikitable" | | {| class="wikitable" |
− | |+
| |
| !인자 | | !인자 |
| !설명 | | !설명 |
62번째 줄: |
50번째 줄: |
| |- | | |- |
| |name | | |name |
− | |각 URL 패턴별로 이름을 붙여준다.(이름공간의 역할을 한다.) | + | |각 URL 패턴별로 이름을 붙여준다.(인덱스의 역할을 한다.) |
| |자세한 건 tip에서. | | |자세한 건 tip에서. |
| |} | | |} |
| ===최소요소=== | | ===최소요소=== |
| <syntaxhighlight lang="python"> | | <syntaxhighlight lang="python"> |
− | from dfango.urls import path | + | from django.urls import path |
− | from . import 불러올파이썬파일 #현재경로에서 불러온다는 의미. | + | from . import 불러올파이썬파일 # 현재경로에서 불러온다는 의미. |
| | | |
| urlpatterns = [ | | urlpatterns = [ |
− | path('주소/', 함수), | + | path('주소/', 뷰), |
| past(.....) | | past(.....) |
| .... | | .... |
77번째 줄: |
65번째 줄: |
| </syntaxhighlight> | | </syntaxhighlight> |
| ===정규표현식의 사용=== | | ===정규표현식의 사용=== |
− | 정규표현식을 사용해서 URL패턴을 작성할 수도 있다. <int:year> 대신 (?P<year>[0-9]{4}) 정규표현식에 익숙하지 않다면 힘들다;; | + | 정규표현식을 사용해서 URL패턴을 작성할 수도 있다. (?P<year>[0-9]{4}) 형태로. 정규표현식에 익숙하지 않다면 힘들다;; |
| | | |
| (정규표현식을 쓸 때엔 path()대신 re_path()함수를 사용한다.) | | (정규표현식을 쓸 때엔 path()대신 re_path()함수를 사용한다.) |
| + | |
| + | = 변수 전달하기 = |
| + | 주소창에 정규표현식을 그대로 사용하긴 어려우니 다음과 같이 타입을 지정하여 내용을 view로 전달할 수 있다. |
| + | |
| + | <변수타입:변수명> 형태로 path 함수에 넣으면 view에 그대로 전달해준다. |
| + | |
| + | ===사용 가능한 타입=== |
| + | {| class="wikitable" |
| + | !type |
| + | !설명 |
| + | |- |
| + | |str |
| + | |/를 제외한 모든 문자열과 매칭됨.(디폴트타입) |
| + | |- |
| + | |int |
| + | |음의 정수를 제외한 0과 양의 정수. 파이썬의 int타입으로 반환되어 view에 전달한다. |
| + | |- |
| + | |slug |
| + | |slug형식의 문자열.(아스키문자나 숫자, 하이픈, _를 포함한 슬러그 문자열과 매칭) |
| + | |- |
| + | |uuid |
| + | |UUID형식의 문자열. |
| + | |- |
| + | |path |
| + | |기본적으로 str과 동일. /를 포함한 모든 문자열과 매치. /를 포함하여 주소지정을 할 때 사용. |
| + | |}ex) path('origin_image/<int:image_id>/', views.show_origin_image, name='origin_image'), |
| + | *setting.py의 ROOT_URLCONF 항목을 읽어 urls.py를 불러오고, urlpatterns변수에 지정된 패턴을 찾아 대응시킨다. |
| + | |
| + | === 전달예시 === |
| + | {| class="wikitable" |
| + | !type |
| + | !설명 |
| + | |- |
| + | |str |
| + | |path('str/<str:content>/', views.hello_content), |
| + | |- |
| + | |int |
| + | |path('int/<int:content>/', views.hello_content), |
| + | |- |
| + | |slug |
| + | |path('slug/<slug:content>/', views.hello_content), |
| + | |- |
| + | |uuid |
| + | |path('uuid/<uuid:content>/', views.hello_content), |
| + | |- |
| + | |path |
| + | |path('path/<path:content>/', views.hello_content), |
| + | |} |
| + | |
| =팁= | | =팁= |
| ==URL분리== | | ==URL분리== |
| 하나의 urls.py에 모든 주소를 관리하게 하는 건 양이 많아져 정리하기도 힘들다. 때문에 앱마다 URL을 알아서 관리하게끔 교통정리를 해주는 편이 좋다. 이 편이 정리하기에도, 확장하기에도 좋다. | | 하나의 urls.py에 모든 주소를 관리하게 하는 건 양이 많아져 정리하기도 힘들다. 때문에 앱마다 URL을 알아서 관리하게끔 교통정리를 해주는 편이 좋다. 이 편이 정리하기에도, 확장하기에도 좋다. |
| ===config/urls.py 수정=== | | ===config/urls.py 수정=== |
− | 앱으로 넘겨줄 url을 <code>path('앱이름/', include('앱이름.urls')),</code> 형태로 고치면 앱이름 주소와 매칭되는 모든 URL을 앱이름.urls로 넘긴다. [http://xn--hq1bm8jm9l/%EC%95%B1%EC%9D%B4%EB%A6%84/ http://도메인/앱이름/] 으로 시작되는 모든 주소를 앱의 urls.py로 넘겨준다는 의미이다.(#이후경로 매핑을 위해 주소 뒤에 /를 붙여준다.) | + | 앱으로 넘겨줄 url을 <code>path('앱이름/', include('앱이름.urls')),</code> 형태로 고치면 앱이름 주소와 매칭되는 모든 URL을 앱이름.urls로 넘긴다. [http://xn--hq1bm8jm9l/%EC%95%B1%EC%9D%B4%EB%A6%84/ http://도메인/앱이름/] 으로 시작되는 모든 주소를 앱의 urls.py로 넘겨준다는 의미이다.(#이후경로 매핑을 위해 주소 뒤에 /를 붙여준다.)<syntaxhighlight lang="python"> |
| + | from django.urls import path, include |
| + | from .views import * #해당 앱의 뷰를 불러온다. |
| + | |
| + | urlpatterns = [ |
| + | path('주소/', 불러올파이썬파일.불러올함수, name='인덱스명'), # 함수를 불러올 때 ()는 제외한다. |
| + | path('주소/', include('앱이름.urls')), |
| + | past(.....) |
| + | .... |
| + | ] |
| + | </syntaxhighlight> |
| ===앱/urls.py 작성=== | | ===앱/urls.py 작성=== |
− | /앱이름/urls.py 파일을 생성해두어야 한다. 다음과 같은 요소들이 최소요소. 여기서 작성된 url은 이전 주소 뒤에 붙는다.<syntaxhighlight lang="python"> | + | /앱이름/urls.py 파일을 생성해두어야 한다. 다음과 같은 요소들이 최소요소. 여기서 작성된 url은 이전 주소 뒤에 붙는다.<syntaxhighlight lang="python3"> |
− | from dfango.urls import path, include #include를 더 import 하자. | + | from django.urls import path |
| from .views import * #해당 앱의 뷰를 불러온다. | | from .views import * #해당 앱의 뷰를 불러온다. |
| | | |
94번째 줄: |
141번째 줄: |
| urlpatterns = [ | | urlpatterns = [ |
| path('주소/', 불러올파이썬파일.불러올함수, name='인덱스명'), | | path('주소/', 불러올파이썬파일.불러올함수, name='인덱스명'), |
− | past(.....) | + | path(.....) |
| .... | | .... |
| ] | | ] |