1

我正试图了解 Django url 中的正则表达式。我目前正在本地开发,我希望能够将请求定向http://localhost:8000/options/items/item-string-1121/到我的应用程序中名为“选项”的“详细信息”视图,将请求字符串的最后数字部分(1121)作为参数“id”传递' 到视图函数。

详细签名options/views.py如下,默认id=1:

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

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

...

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

在选项/urls.py 中:

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

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

任何人都可以看到问题吗?

4

2 回答 2

3

您需要在 (.+) 上使用非贪婪量词,因此 r'^items/(.+?)(P\d+)/$'。否则,第一个 glob 会愉快地吃到字符串的末尾,从而阻止 ID 永远匹配。

于 2012-04-28T18:07:34.093 回答
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'),
    ...
)
于 2012-04-28T18:29:34.077 回答