我在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解析器找不到匹配项。当我调试它尝试的URL时,它会将上述内容解析为:
^api/ (?P<api_key>(.+))/ land-use/ [name='geoprocessing_land_use']
注意(?P<api_key>(.+))
和land-use
之间的空格。为什么要为每个include插入这些空格,如何获得匹配?你知道吗
如果我为^api/(?P<api_key>(.+))/land-use/
硬编码一个url,我就能得到一个匹配的。你知道吗
另外,如果我在后面的/
后面添加一个字符,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)))
尝试:
我不确定当你看起来不需要这样做的时候,你试图通过包含一个模式来完成什么。你知道吗
看起来在正则表达式中使用
(.+)
组迫使django URL解析器查找不存在的字符。当后面的斜杠后面有字符时,总是进行解析,但是当这个组位于url段的末尾时,会在末尾标记一个空格。你知道吗我通过用一个简单的单词匹配器
\w+
交换(.+)
组来解决这个问题:相关问题 更多 >
编程相关推荐