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 リゾルバにリクエストを送信すると、一致するものが見つかりません。試した URL をデバッグすると、上記が次のように解決されます。

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

(?P<api_key>(.+))との間のスペースに注意してくださいland-use。インクルードごとにこれらのスペースが挿入されるのはなぜですか? また、一致させるにはどうすればよいですか?

アップデート

URL をハードコードする^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

正規表現内でグループを使用すると(.+)、djangoURLリゾルバーに存在しない文字を検索するように強制されたようです。これは、末尾のスラッシュの後に文字がある場合は常に解析されますが、このグループがurlセグメントの最後にある場合は、最後にスペースがタグ付けされます。

(.+)グループを単純なワードマッチャーと交換することでこれを解決しました\w+

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