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

반응형