2012-04-28 29 views
1

私はDjangoのURLでregexpの周りに頭を上げようとしています。私は現在ローカルに開発しています。私はhttp://localhost:8000/options/items/item-string-1121/のようなリクエストを、 'options'という名前の私のアプリの 'details'ビューに向けて、リクエスト文字列(1121)の最後の部分をパラメータ ' id 'をビュー関数に追加します。DjangoのURL regexpが動作しない

デフォルトとして、ID = 1を取って、次のようにoptions/views.pyで詳細については、署名がある:私は私のルートurls.pyに次き

def details(request, id=1): 
    ... 

... 

urlpatterns += patterns('', 
    url(r'^options/, include(options.urls')), 
) 

とオプションで /urls.py:

urlpatterns = patterns('options.views', 
    url(r'^items/(.+)(P<id>\d+)/$', 'details'), 
    ... 
) 

上記のURLをリクエストしようとすると、devサーバーは再び一致するように試みますパターン^options/ ^items/(.+)(P<id>\d+)/$が一致しません。

誰でも問題を見ることができますか?

+0

'R '^項目、無名のグループをキャプチャする必要がありません/.+-(?P \ d +)/ $ ''は問題ありません。 – okm

答えて

3

(。+)には貪欲でない量指定子が必要なので、r 'items /(。+?)(P \ d +)/ $'です。さもなければ、最初のglobは文字列の終わりまで喜んで食べて、IDの一致を防ぐ。

+0

意味がありますが、それでもまだ一致していません。私はちょうど404を取得します – JimJay

+0

ああ、それも(?P )、もっと重要なものです:-) – coderanger

+0

OK、二番目?ありがとう! :) – JimJay

0

引用符がありません。

urlpatterns += patterns('', 
    url(r'^options/, include(options.urls')), 
) 

私はあなたの表現のあまりわからないんだけど

urlpatterns += patterns('', 
    url(r'^options/', include('options.urls')), 
) 

すべきであり、これを試してみてください:

urlpatterns = patterns('options.views', 
    url(r'^items/(?<=-)(?P<id>\d+)/$', 'details'), 
    ... 
) 
+0

で始まります) '/'と '(?P ...) 'の間の部分は一致しません全体にマッチしない – okm