Django
[Django] 7. Django URLs
개발자 뭄뭄
2022. 9. 2. 17:38
반응형
💡
웹 어플리케이션은 URL을 통한 클라이언트의 요청에서부터 시작한다.
1. Trailing Slashes
- Django는 URL 끝에 ‘/’ 가 없으면 자동으로 붙여준다.
- 모든 주소가 ‘/’ 로 끝난다. (쟝고가 그랬어!) cf) URL의 정규화 : 정규 URL (오리지널로 평가되어야 할 URL)을 명시하는 것. 복수의 페이지에서같은 콘텐츠가 존재하는 것을 방지하기 위함.
2. Variable routing
- 템플릿의 많은 부분이 중복되고, 일부분만 변경되는 상황에서 비슷한 URL, 템플릿을 만들어야 할까?
⇒ URL 주소를 변수로 사용!
💡URL의 일부를 변수로 지정해서 view 함수의 인자로 넘긴다.
- 변수는
<>
에 정의하며, view 함수의 인자로 할당된다.- 기본 타입은 str 이며, 주로 str 혹은 int로 쓰인다.
urls.py
path('hello/<name>/', views.hello),
articles/views.py
에 다음과 같이 작성한다.def hello(request, name): context = { 'name':name, } return render(request, 'hello.html', context)
articles/templates/hello.html
{% extends "base2.html" %} {% block content %} <h1>만나서 반가워요</h1> <h2>{{name}}님</h2> {% endblock content %}
3. App URL mapping
- 하나의 프로젝트 안에 여러 App을 만들었을 때,
project>urls.py
에는 많은from <app이름> import
views.py
가 쌓이게 된다.
- 임시적인 해결책으로는 from <app이름>
import
views.py
as
app.views.py
처럼 가져오는 방법도 있지만, 더 근원적인 해결책은 없을까?
- 각각의 app 폴더 안에 urls.py를 작성하고 다음과 같이 만든다.
# app > urls.py
from . import views
urlpatterns = [
path('index', views.index),
]
# pjt > urls.py
from django.urls import path, include
urlpatterns=[
path('articles/', include('articles.urls')),
]
즉, 전체의 프로젝트에서 각각의 app에 있는 urls.py
를 가져오겠다는 의미이다.!
이 때 주의해야 할 점은 pjt/urls.py
안에 들어가 있는 app들의 urls.py는 빈 페이지이면 안된다!
💡
빈 상태를 표현하고 싶으면, urlpatterns = [] 인 상태로 라도 만들어야 에러가 안난다!
이제는 articles/index/
로 접근해야 페이지가 나온다.
만약, url이름을 바꾼다면 모든 html의 경로를 바꿔야 한다. 이런 불편함을 줄일 수는 없을까?
- 각각의 url에 별명(name) 을 붙여준다.
Uploaded by N2T
반응형