본문 바로가기
 

하나성경

읽기 쉬운 성경, 하나성경을 소개합니다.

www.hbible.co.kr

컴퓨터에서는

[ Django ] 장고의 url 매칭 - 한글 오류 (공백 오류)

by 컴 여행자 2025. 4. 4.
728x90
반응형

 

장고
장고

 

 


Reverse for 'hb_quiz_volume_order' with arguments '()' and keyword arguments '{u'volume': u'\uc608\ub808\ubbf8\uc57c \uc560\uac00', u'quiz_id': 0}' not found. 1 pattern(s) tried: [u'hb/quiz/volume/order/(?P<volume>\\w+)/(?P<quiz_id>\\d+)/$']
 
장고에서 난 오류입니다. 무엇이 잘못된 것일까요? 아무래도 원인은 volume 값이 한글이어서 그런것 같습니다.
 

 

 

네, 맞습니다. 오류 메시지와 정황을 보면 volume 값이 한글(예: "예레미야 애가")이기 때문에 Django의 URL 패턴과 매칭이 되지 않는 것이 문제입니다. 구체적으로 설명드릴게요.


🔍 오류 메시지 분석

Reverse for 'hb_quiz_volume_order' with arguments '()' and keyword arguments '{u'volume': u'\uc608\ub808\ubbf8\uc57c \uc560\uac00', u'quiz_id': 0}' not found. 
1 pattern(s) tried: [u'hb/quiz/volume/order/(?P<volume>\\w+)/(?P<quiz_id>\\d+)/$']

 

  • volume: 예레미야 애가 (한글 문자열)
  • URL 패턴: hb/quiz/volume/order/(?P<volume>\w+)/(?P<quiz_id>\d+)/
  • 에러 내용: 해당 패턴에 대해 reverse()를 할 수 없음

🚨 문제의 원인

정의된 URL 패턴의 정규표현식에서 (?P<volume>\w+) 부분이 문제입니다.

  • \w+는 영문자, 숫자, 밑줄(_)만 매칭합니다.
  • 한글, 띄어쓰기(공백), 특수문자는 \w에 포함되지 않습니다.
    • 그래서 '예레미야 애가' 같은 문자열은 매칭이 안 됩니다.

✅ 해결 방법

1. 정규표현식을 수정하세요

URL 패턴을 다음과 같이 변경하세요:

# urls.py
url(r'^hb/quiz/volume/order/(?P<volume>[^/]+)/(?P<quiz_id>\d+)/$', views.hb_quiz_volume_order, name='hb_quiz_volume_order')

 

  • [^/]+ 는 /를 제외한 어떤 문자든 포함할 수 있게 해줍니다.
  • 즉, 한글, 공백, 특수문자 등도 허용됩니다.

2. URL 인코딩/디코딩도 확인하세요 (중요!)

한글을 URL에 사용할 경우 자동으로 인코딩되므로, 다음과 같이 사용할 수 있습니다.

from django.urls import reverse
from django.utils.http import urlquote  # Django 1.x
# Python 3에서는 urllib.parse.quote 사용

url = reverse('hb_quiz_volume_order', kwargs={
    'volume': urlquote(u'예레미야 애가'),
    'quiz_id': 0
})

 

또는 Django 1.10 이하에서:

from django.utils.http import urlquote

💡 추가 팁

  • 가능하면 URL에서 한글이나 공백 대신 slug(예: jeremiah-lamentations)를 사용하는 것이 일반적입니다.
  • slugify 해서 저장하고 URL로는 slug를 쓰는 방식을 추천드립니다.

 

 

https://www.djangoproject.com/

 

Django

The web framework for perfectionists with deadlines.

www.djangoproject.com

 

 

728x90
반응형

댓글