2013-07-25 4 views
1

Salut à tous,Django URL Reg-Ex

Comment cette expression fait travail?


urlpatterns = patterns('', 
    url(r'^get/(?P<app_id>\d+)/$', 'app.views.app'), 
    ... 
) 

Je comprends ce qu'il fait , au moins une carte url entré par l'utilisateur à la fonction app() dans la page de vue de l'application. Je comprends également que c'est une expression régulière qui finit par prendre l'identifiant de l'application et la mapper à l'URL. Mais où va cette fonction? Que se passe-t-il avec le r '^ ...? P/$ (je reçois le d + est un nombre de regex, de l'id lui-même, mais c'est à peu près tout).

Je comprends également que cette fonction url s'inspire du module django.conf.urls.

Peut-être que mon malentendu est plus enterré dans mon manque d'expérience regex. Néanmoins, j'ai besoin d'aide! Je n'aime pas utiliser des choses que je ne comprends pas, et Je suis coupable.

Répondre

4

Jetons un coup d'oeil: r'^get/(?P<app_id>\d+)/$'

  1. Les r'' moyens qui prennent en caractères de la chaîne tous les caractères à l'intérieur des guillemets de chaîne. Caractère
  2. ^ caractère signifie le début de l'expression régulière. Par exemple, forget/123 ne correspondra pas à l'expression car il ne commence pas par get, si le signe n'y figurait pas, il devrait correspondre, car il ne forcera pas la chaîne correspondante à commencer par get, mais seulement get... apparaît dans la chaîne. Le caractère $ signifie la fin de l'expression. Si elle est absente, get/123/xd peut correspondre à l'expression et ceci n'est pas souhaité.
  3. (?P<>) est un moyen de donner un nom/alias à un groupe dans l'expression.

Vous devriez lire the python's regular expressions documentation. C'est très bien de connaître les expressions régulières car elles sont très utiles.

Espérons que cela aide!

+0

Pouvez-vous développer un peu sur # 2 quant à ce que vous entendez par "ne correspondra pas à l'expression?" Je ne suis pas tout à fait ce que vous voulez dire par pourquoi oublier/123 ne fonctionnerait pas. Aussi, qu'en est-il du "?" – jdero

+0

'forget/123' ne fonctionnera pas car avec le signe'^'vous dites à la regex que tout ce qui vient à être apparié, doit commencer par' get', donc 'forget' ne correspondra pas, parce que 'for' avant' get'. M'ai-je expliqué, désolé sinon, je vais l'essayer à nouveau :) –

+0

Je pense que cela a du sens maintenant merci. Je pense que je comprends ce que vous dites. – jdero

1

r change juste comment le littéral de chaîne suivant est interprété. Les barres obliques inverses (\) ne sont pas traitées comme des séquences d'échappement, ce qui signifie que la regex de la chaîne sera utilisée telle quelle.

^ au début et $ respectivement à la fin et à la fin de la chaîne.

(?P<name>...) est un groupe nommé de sauvegarde - il vous aide à couper une partie de l'URL et à la passer en paramètre dans la vue. Voyez plus dans django named groups docs.

Espérons que ça aide.