2016-03-30 12 views
1

Ich habe eine Seite mit einem Formular darin. Seine url istWie werden Django-URLs abgeglichen?

url('tasks/searchBook', views.searchBook, name='searchBook'), 

, wenn ich die Schaltfläche Formular klicken, es

url('tasks/searchBookResult/', views.searchBookResult, name='searchBookResult'), 

URL in der Adressleiste zu ändern, aber die nächsten HTML-Datei zu machen ist nicht auf diese URL gehen sollte. Wenn ich jedoch den Platz der URLs in der Urls.py-Datei vertausche, d. H. Die zweite URL oben und die erste URL unten, dann funktioniert es gut.

Was passiert hier?

urls.py Datei:

urlpatterns = [ 
    url(r'^$', views.index, name='index'), 
    url('tasks/searchBook/', views.searchBook, name='searchBook'), 
    url('tasks/searchBookResult/', views.searchBookResult, name='searchBookResult'), 

] 

Codeform in Template-Datei:

<form action="{% url 'lms:searchBookResult' %}" method="post"> 
     {% csrf_token %} 
     <div class="inner centerAlign"> 
      <input type="text" id="bookId" name="bookId" placeholder="Book ID" class="inputField"></input> 
     </div> 
     <div class="inner centerAlign"> 
      <label>OR</label> 
     </div> 
     <div class="inner centerAlign"> 
      <input type="text" id="bookTitle" name="bookTitle" placeholder="Book Title" class="inputField"></input> 
     </div> 
     <div class=" inner centerAlign"> 
      <input type="submit" value="Search" class="button button-primary" name="searchBook"></input> 

     </div> 
    </form> 

views.py:

from django.shortcuts import render 
from django.http import HttpResponse 

# Create your views here. 

def index(request): 
    return render(request, 'lms/loginPage.html') 

def searchBook(request): 
    return render(request,'lms/tasks/searchBook.html') 

def searchBookResult(request): 
    return render(request,'lms/tasks/searchBookResult.html') 

Antwort

5

URL der als reguläre Ausdrücke in der Reihenfolge abgestimmt sind sie gezeigt in der URLs.py.

Da searchBook vor searchBookResult übereinstimmt, wird die erste Seite zurückgegeben.

Bestellen Sie einfach diese so searchBookResult URL ist vor der anderen.

url('tasks/searchBookResult/', views.searchBookResult, name='searchBookResult'), 
url('tasks/searchBook/', views.searchBook, name='searchBook'), 

Alternativ können Sie auch ein $ am Ende der URL enthalten, das das Ende einer

url('tasks/searchBook/$', views.searchBook, name='searchBook'), 
+0

Zugabe $ am Ende gearbeitet Linie anzeigt. Vielen Dank. – User42

Verwandte Themen