我正试图在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+)/$
,但它不匹配。
有人能看到问题吗?
答案 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'),
...
)