我有一个包含表单的页面。它的网址是
url('tasks/searchBook', views.searchBook, name='searchBook'),
当我点击表单的提交按钮时,它应该转到这个 url
url('tasks/searchBookResult/', views.searchBookResult, name='searchBookResult'),
地址栏中的 Url 正在更改,但下一个 html 文件未呈现。 但是,如果我在 urls.py 文件中交换 url 的位置,即将第二个 url 放在顶部,将第一个 url 放在底部,那么它就可以正常工作。
这里发生了什么?
urls.py 文件:
urlpatterns = [
url(r'^$', views.index, name='index'),
url('tasks/searchBook/', views.searchBook, name='searchBook'),
url('tasks/searchBookResult/', views.searchBookResult, name='searchBookResult'),
]
模板文件中的表单代码:
<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>
View .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')
最佳答案
Url 按照它们在 urls.py 中显示的顺序匹配为正则表达式。
由于 searchBook
匹配在 searchBookResult
之前,因此返回第一页。
只需对这些重新排序,使 searchBookResult
url 在另一个之前。
url('tasks/searchBookResult/', views.searchBookResult, name='searchBookResult'),
url('tasks/searchBook/', views.searchBook, name='searchBook'),
或者,您可以在 url 的末尾包含一个 $
,表示一行结束
url('tasks/searchBook/$', views.searchBook, name='searchBook'),
关于python - Django url 是如何匹配的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36312080/