-
카테고리
-
세부 분야
풀스택
-
해결 여부
미해결
URL 정규표현식 질문입니다!
22.02.14 16:51 작성 조회수 200
0
from django.urls import path, re_path, register_converter
from . import views
# 커스텀 Converter
class YearConverter:
regex = r"20\d{2}" # 정규표현식 패턴을 작성
def to_python(self, value):
return int(value)
def to_url(self, value):
return "%04d" % value
# 커스텀 Converter를 등록하고 이름을 설정
register_converter(YearConverter, 'year')
app_name = 'instagram'
urlpatterns = [
path('', views.post_list, name='post_list'),
# path('<int:pk>/', views.post_detail),
re_path(r'(?P<pk>\d{3})/', views.post_detail),
# path('archives/<int:year>/', views.archives_year),
# re_path(r'archives/(?P<year>20\d{2})/', views.archives_year),
path('archives/<year:year>/', views.archives_year),
# re_path(r'(?P<pk>\d+)/$', views.post_detail),
]
안녕하세요, 강사님!
위와 같이 instagram 앱 내부의 urls.py에서
re_path(r'(?P<pk>\d{3})/', views.post_detail),
이렇게 re_path함수를 사용하여 localhost:8000/instagram/이후에 3자리만 요청이 가능하도록 해보고 싶은데요.
이렇게 1자리 또는 2자리를 입력하면 정상적으로 오류가 나오는데,
다음과 같이 3자리만 매칭되는 게 아니라, 3자리 이상은 전부 매칭이 되고 있어서 질문을 드려봅니다. 어떤 부분이 문제가 있는걸까요..?
답변을 작성해보세요.
1
이진석
지식공유자2022.02.14
안녕하세요.
re_path를 쓰실 때에는 정규표현식에서 문자열의 시작과 끝을 명시해주셔야 합니다.
re_path(r'(?P<pk>^\d{3})/$', views.post_detail),
이를 지정하지 않으시면, 부분매칭이 됩니다. 숫자 4자리도 결국 숫자 3자리가 포함된 것이니까 매칭이 된 것입니다.
화이팅입니다. :-)
답변 1