对于我在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/
的网址进行硬编码,我就可以获得匹配。
另外,如果我在跟踪/
之后添加了一个字符,那么网址匹配也会起作用:
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)))
答案 0 :(得分:1)
尝试:
urlpatterns = patterns('api.geoprocessing',
url(r'^land-use/(?P<api_key>(.+))/$', 'landUse',
name='geoprocessing_land_use'))
)
我不确定你想要通过包含一个模式来实现什么,而你似乎不需要这样做。
答案 1 :(得分:0)
在我的正则表达式中使用(.+)
组似乎是强制django URL解析器查找不存在的字符。当尾部斜杠后面有字符时,它总是会解析,但当这个组位于url段的末尾时,会在末尾标记一个空格。
我通过使用简单的词匹配器(.+)
交换\w+
组来解决这个问题:
(r'^api/(?P<api_key>\w+)/', include('api.api')),