1

我有一个我认为是我在 django 中构建的公共 API 的非常简单的 URL 配置:

# public API, in urls.py
(r'^api/', include('api.urls'))

# in api/urls.py
api_key_patterns = patterns('api.geoprocessing',
    url(r'^land-use/', 'landUse', name='geoprocessing_land_use'))

urlpatterns = patterns('',
    url(r'^(?P<api_key>(.+))/', include(api_key_patterns)))

但是,当我向/api/123/land-use/Django 的 URL 解析器发出请求时,找不到匹配项。当我调试它尝试过的网址时,它会将上述问题解决为:

^api/ (?P<api_key>(.+))/ land-use/ [name='geoprocessing_land_use']

(?P<api_key>(.+))注意和之间的空格land-use。为什么要为每个包含插入这些空格,我怎样才能得到匹配?

更新

如果我硬编码一个网址,^api/(?P<api_key>(.+))/land-use/我就能得到匹配。

/此外,如果我在尾随URL 匹配后添加一个字符也可以:

api_key_patterns = patterns('api.geoprocessing', url(r'^and-use/$', 'landUse',name='geoprocessing_land_use'))
urlpatterns = patterns('', url(r'^(?P<api_key>(.+))/l', include(api_key_patterns)))
4

2 回答 2

1

尝试:

urlpatterns = patterns('api.geoprocessing',
    url(r'^land-use/(?P<api_key>(.+))/$', 'landUse',
        name='geoprocessing_land_use'))
)

当您似乎不需要这样做时,我不确定您通过包含一个模式来尝试完成什么。

于 2013-03-07T17:49:12.847 回答
0

看起来(.+)在我的正则表达式中使用一个组迫使 django URL 解析器寻找一个不存在的字符。当斜杠后面有字符时,这总是会解析,但是当该组位于 url 段的末尾时,末尾会标记一个空格。

(.+)我通过用一个简单的单词匹配器交换组来解决这个问题\w+

(r'^api/(?P<api_key>\w+)/', include('api.api')),
于 2013-03-07T18:22:05.947 回答