Django url正则表达式问题

时间:2011-07-13 04:43:51

标签: regex django django-urls

我有以下网址

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

匹配/tom//tom-max/等网址,但不匹配我想要的/tom-2/tom-brandy-monster等网址。

基本上我想捕捉连字符,字母和数字的组合。

更新

这是我的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)),
)

这是在我的users / urls.py

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

UPDATE2

我的观点是错误的。这个正则表达式适用于所有上述例子。

1 个答案:

答案 0 :(得分:4)

你所拥有的匹配你指定的所有这些(见下文)。您应该检查以确保(a)您没有先前匹配的网址格式和(b)包含此格式(一个常见的罪魁祸首是使用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'