包括其他网址格式

时间:2013-03-07 17:38:05

标签: python django url

对于我在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)))

2 个答案:

答案 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')),
相关问题