django url正则表达式

时间:2012-10-11 00:01:21

标签: django

所以我有一个主urls.py看起来像这样:

    urlpatterns = patterns('',
(r'^users/(?P<username>.*)/', include('app.urls')), 
url(r'^users/(?P<username>.*)$',direct_to_template,{'template':'accounts/profile.html'}, name='profile'),)

和app.urls.py

urlpatterns = patterns('',url(r'^app/create/$', create_city ,name='create_city'),)

我的问题是,当我localhost:8000 / users / michael / app / create /它没有调用我的视图。我试过没有运气改变网址的顺序,所以我相信我的问题是正则表达式,但不知道要改变什么,任何人?

1 个答案:

答案 0 :(得分:1)

命名组(?P<username>.*)将匹配任何字符,零次或多次。在您的用户名中,包括正斜杠。

在网址模式中,使用(?P<username>[-\w]+)会更常见。这将匹配来自小写a-z,大写A-Z,数字0-9连字符和下划线的集合中的至少一个字符。

我还建议您为profile视图的模式添加尾部斜杠。

总而言之,我建议您使用以下内容作为urls.py的起点:

urlpatterns = patterns('',
   url(r'^users/(?P<username>[-\w]+)/$',direct_to_template, {'template':'accounts/profile.html'}, name='profile'), 
   (r'^users/(?P<username>[-\w]+)/', include('app.urls')), 
)