2016-06-05 9 views
1

Ich habe eine url.py Datei wie unten -URL Mustervergleich ist in django verwirrend

app_name = "fronta" 
urlpatterns = [ 
    url(r'^$', views.index, name='index'), 
    url(r'home/', views.index, name='home'), 
    url(r'lostform/', views.lostform, name='lostform'), 
    url(r'submitlostform/',views.submitlostform, name="submitlostform"), 
] 

ich die Aktion für eine Form wie unten -

<form method="post" action="{% url 'fronta:submitlostform'%}"> 

Wenn ich den Absenden-Button klicken , URL in der Adressleiste ändert sich von http://localhost:8000/fronta/lostform/ zu http://localhost:8000/fronta/submitlostform/ aber Seite ist nicht umgeleitet.

Wenn ich jedoch die Reihenfolge der URLs in der Datei urls.py ändern und die Zeile url(r'submitlostform/',views.submitlostform, name="submitlostform") an die Spitze der URLs verschieben, funktioniert sie und die Seite wird umgeleitet. ODER Wenn ich den Namen von URL-Formular submitlostform zu lostformsubmit ändere, dann funktioniert das auch.

Warum passiert das? Ich bin verwirrt, wie Url-Muster-Matching hier funktioniert. Lassen Sie mich wissen, wenn mehr Informationen benötigt werden.

+0

Kein Javascript. Antwort von C14L ist richtig. – User42

Antwort

1

Reguläre Ausdrücke.

url(r'lostform/', views.lostform, name='lostform'), 

Das passt lostform/ aber auch 123lostform/ und lostform/123 und 123lostform/321

ändern es zu

url(r'^lostform/$', views.lostform, name='lostform'), 
  • ^ bedeutet "Anfang"

  • $ bedeutet "Ende"

Ändern Sie alle anderen URL-Muster entsprechend.

Btw, ist das, was das erste URL-Muster bedeutet:

url(r'^$', views.index, name='index'), 

Der Anfang der URL ^, durch keine Zeichen überhaupt, gefolgt von Ende $ der URL.