Django url regexp无法正常工作

时间:2012-04-28 18:01:50

标签: regex django

我正试图在Django网址中找到regexp。我目前正在本地开发,我希望能够将http://localhost:8000/options/items/item-string-1121/之类的请求指向我的应用程序中名为'options'的'details'视图,并传入请求字符串的最后一个数字部分(1121)作为视图函数的参数“id”。

options/views.py中的详细信息签名如下,默认值为id = 1:

def details(request, id=1):
    ...

我的root urls.py中有以下内容:

...

urlpatterns += patterns('',
    url(r'^options/, include(options.urls')),
)

并在options / urls.py中:

urlpatterns = patterns('options.views', 
    url(r'^items/(.+)(P<id>\d+)/$', 'details'),
    ...
)

现在,当我尝试请求上述URL时,开发服务器说它尝试匹配模式^options/ ^items/(.+)(P<id>\d+)/$,但它不匹配。

有人能看到问题吗?

2 个答案:

答案 0 :(得分:3)

你需要一个非贪婪的量词(。+),所以r'^ items /(。+?)(P \ d +)/ $'。否则,第一个glob会愉快地吃到字符串的末尾,从而阻止ID匹配。

答案 1 :(得分:0)

你缺少引号。

urlpatterns += patterns('',
    url(r'^options/, include(options.urls')),
)

应该是

urlpatterns += patterns('',
    url(r'^options/', include('options.urls')),
)

我对你的表达不太确定,可以试试这个:

urlpatterns = patterns('options.views', 
    url(r'^items/(?<=-)(?P<id>\d+)/$', 'details'),
    ...
)