Django URL Regex вопрос - PullRequest
       36

Django URL Regex вопрос

1 голос
/ 13 июля 2011

У меня есть следующий URL

url(r'^(?P<name>[A-Za-z0-9-]+)/$', 'user', name='user')

Это соответствует URL-адресам, таким как /tom/ и /tom-max/, но не относится к URL-адресам, таким как /tom-2/ или tom-brandy-monster, которые я хочу.

В основном я хотел бы захватить комбинацию дефисов, букв и цифр.

UPDATE

Это в моем urls.py

urlpatterns = patterns('',
    url(r'^$', 'homepage.views.home', name='home'),
    url(r'^user/', include('users.urls')),
    url(r'^plans/', include('plans.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

Это в моих пользователях / urls.py

urlpatterns = patterns(
    'users.views',
    url(r'^(?P<user>[A-Za-z0-9-]+)/$', 'user', name='user'), 
)

UPDATE2

Ошибка была в моих взглядах. Это регулярное выражение работает для всех вышеупомянутых примеров.

1 Ответ

4 голосов
/ 13 июля 2011

То, что у вас есть будет соответствовать всем тем, что вы указали (см. Ниже). Вы должны убедиться, что (а) у вас нет шаблона URL, который будет соответствовать ранее, и (б) он включен (один распространенный виновник использует urlpatterns = ... вместо urlpatterns += ... после его инициализации) .

>>> import re
>>> urlpattern = re.compile(r'^(?P<name>[A-Za-z0-9-]+)/$')
>>> urlpattern.match('tom/').group('name')
'tom'
>>> urlpattern.match('tom-max/').group('name')
'tom-max'
>>> urlpattern.match('tom-2/').group('name')
'tom-2'
>>> urlpattern.match('tom-brandy-monster/').group('name')
'tom-brandy-monster'
...