python - Django url 是如何匹配的?

标签 python django

我有一个包含表单的页面。它的网址是

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/

相关文章:

python - 带有 numpy 数组的 dask bag foldby

python - 将 Django RawQuerySet 转换为查询集

python - 使用 python 2.7 的 Django 中的类型错误

python - 如何创建一个包来安装 python 脚本需要的所有依赖项

django - 为什么 django-sphinx 只输出 20 个结果?我怎样才能得到剩下的?

python - 限制每组 n 个结果 - Django queryset

jquery - 向 Django REST Framework 发送 jQuery 请求导致未找到 JSON 对象错误

python - 从带有富文本的 QLabel 中获取纯文本

python - 关于在不覆盖现有数据的情况下将此数据(JSON)存储在 Redis 中的建议?

python - 更改 Jupyter 笔记本中 Altair 图渲染的大小