我制作了一个非常简单的django应用程序,只是添加了一个表单(以及相关视图,urls.py中的条目等),但是无论我在地址栏中输入的URL是什么,它总是始终重定向到首页。
这是我的 urls.py :
from django.conf.urls import url
from . import views
urlpatterns = [
url('', views.index, name='index'),
url('booking/new/', views.booking_new, name='booking_new'),
]
和我的 views.py :
from __future__ import unicode_literals
from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader
from .forms import BookingForm
def index(request):
template = loader.get_template('/home/dave/dave/dave_site/home/templates/home/index.html')
return HttpResponse(template.render({}, request))
def booking_new(request):
form = BookingForm()
return render(request, 'home/booking_edit.html', {'form': form})
当我尝试访问/ home / booking / new或/ booking / new时,我注意到它只是加载了我设置的默认主页。当输入任何URL时,即使是毫无意义的URL,它仍然会显示此网站,并且运行runserver到控制台的日志将以往的请求显示为HTTP 200 successful
。
我似乎没有设置catchall
网址,所以不确定为什么会这样。
有什么问题,我该如何解决?
答案 0 :(得分:2)
空字符串''
是一种覆盖模式。您应该使其更加具体。
答案 1 :(得分:2)
Django按顺序运行每个URL模式,并在与请求的URL匹配的第一个URL模式处停止。
在url.py中,将第一个网址更改为url(r'^$', views.index, name='index')
答案 2 :(得分:1)
这是因为''
始终与每个网址匹配。您必须添加正则表达式或将其移至底部(但如果不匹配任何模式,它将显示您的索引页)
urlpatterns = [
url('^$', views.index, name='index'),
url('booking/new/', views.booking_new, name='booking_new'),
]
来自Django文档
Django按顺序运行每个URL模式,并在与请求的URL匹配的第一个URL模式处停止。
参考:https://docs.djangoproject.com/en/2.1/topics/http/urls/#how-django-processes-a-request