2012-04-28 4 views
1

J'essaie de comprendre les expressions rationnelles de Django. Je suis actuellement en développement local et je veux être en mesure de diriger une demande telle que http://localhost:8000/options/items/item-string-1121/ à la vue 'détails' dans mon application appelée 'options', en passant dans la partie numéro de la chaîne de requête (1121) en tant que paramètre ' id 'à la fonction de vue.Django url regexp ne fonctionne pas

La signature pour plus de détails dans options/views.py est la suivante, en id = 1 par défaut:

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

je suit dans mon urls.py racine:

... 

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

et dans les options/Maintenant, lorsque j'essaie de demander l'URL ci-dessus, le serveur de dev dit qu'il a essayé de faire correspondre à nouveau st le motif ^options/ ^items/(.+)(P<id>\d+)/$ mais il ne correspond pas.

Quelqu'un peut-il voir le problème?

+0

Il n'y a pas besoin de saisir un groupe sans nom, 'r '^ articles /.+-(?P \ d +)/$ ''est correct. – okm

Répondre

3

Vous avez besoin d'un quantificateur non gourmand sur le (. +), Donc r '^ items/(. +?) (P \ d +)/$'. Sinon, ce premier glob mange joyeusement jusqu'à la fin de la chaîne, empêchant ainsi l'ID de correspondre.

+0

Semble sens, mais il ne correspond toujours pas .. Je viens d'obtenir un 404 – JimJay

+0

Ahh, et cela devrait aussi être (? P ), c'est le plus important :-) – coderanger

+0

ok, ça a eu .. pas sûr de ce que seconde ? c'est pour mais merci! :) – JimJay

0

Il vous manque des guillemets.

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

Devrait être

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

Je ne suis pas trop sûr de votre expression, pourrait essayer ceci:

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

La partie entre '/' et '(? P ...)' ne correspond pas pas de correspondance pour l'ensemble – okm