【问题标题】:How does Django urls are matched?Django url 是如何匹配的?
【发布时间】:2016-07-18 15:33:36
【问题描述】:

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

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>

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')

【问题讨论】:

    标签: python django


    【解决方案1】:

    网址按照它们在 urls.py 中显示的顺序匹配为正则表达式。

    由于searchBooksearchBookResult之前匹配,所以返回第一页。

    只需对这些重新排序,以便 searchBookResult 网址位于另一个之前。

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

    或者,您可以在 URL 的末尾添加一个 $,表示一行的结尾

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

    【讨论】:

      猜你喜欢
      • 2016-04-13
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      • 2019-08-07
      • 2014-01-18
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      相关资源
      最近更新 更多