본문 바로가기

Python

장고(django) URL 정규식 사용하기

기존의 길고 복잡한 URL 방식에서 특수문자 등을 제거한 간편 URL을 선호하고 있습니다.

기존 URL : https://example.com/products?category=2&pid=25
간편 URL : https://example.com/products/2/25

파이썬 장고 프레임워크도 간편URL 방식을 사용하는데, 우아한 URL(Elegant URL)이라고 부르기도 합니다.

from django.urls import include, path

urlpatterns = [
    path("index/", views.index, name="main-view"),
    path("bio/<username>/", views.bio, name="bio"),
    path("articles/<slug:title>/", views.article, name="article-detail"),
    path("articles/<slug:title>/<int:section>/", views.section, name="article-section"),
    path("blog/", include("blog.urls")),
    ...,
]

 

장고에서는 정규표현식을 이용해 URL을 정의할 수 있습니다.

from django.urls import include, re_path

urlpatterns = [
    re_path(r"^index/$", views.index, name="index"),
    re_path(r"^bio/(?P<username>\w+)/$", views.bio, name="bio"),
    re_path(r"^blog/", include("blog.urls")),
    re_path(r"^articles/(?P<year>[0-9]{4}/$", views.year_archive),
    re_path(r"^articles/(?P<year>[0-9]{4}/(?P<month>[0-9]{2}/$", views.month_archive),
    re_path(r"^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-]+)/$", views.article_detail),
    ...,
]

 

정규식에 익숙하시면 쉽게 이해할 수 있는데요.

익숙하지 않은 분들은 아래 표에 자주 사용하는 정규 표현식의 메타문자와 특수문자를 정리하였으니 참고하시기 바랍니다.

기호
설명
^
문자열 시작할 때
$
문자열이 끝날 때
+
바로 앞에 있는 문자 1개 이상
*
바로 앞에 있는 문자 0개 이상
?
바로 앞에 있는 문자 0개 또는 1개
()
패턴을 묶음으로 처리할 때
[]
문자셋을 나타낼 때
-
문자셋에서 범위를 나타낼 때
[0-9] : 0~9 사이
[a-zA-Z] : a ~ z, A~Z 알파벳 대소문자
[\w-]+ : 알파벳대소문자, 숫자, 언더스코어(_), 하이픈(-) 으로 구성된 문자열
{}
n번 반복
[0-9]{4} : 0~9사이의 숫자 4개
\d
모든 숫자
\w
알파벳 대소문자, 숫자, 언더스코어(_)
\w : [0-9a-zA-Z_] 와 같음
\s
공백문자

 

관련 자료