我有以下网址
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
我的观点是错误的。这个正则表达式适用于所有上述例子。
答案 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'