包括其他URL模式

2024-04-19 13:49:21 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: keynameinpyapiurlincludeuse
2条回答

尝试:

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

我不确定当你看起来不需要这样做的时候,你试图通过包含一个模式来完成什么。你知道吗

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

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

(r'^api/(?P<api_key>\w+)/', include('api.api')),

相关问题 更多 >