【python 版本】3.7 【django版本】3.0
【项目结构】
小声bb:我在网上找了很多解决方法,感觉都大同小异的,但是都没能解决我的问题,我的错误应该是其中的一种,希望能帮和我错一样的人解决。
一、报错信息
Page not found (404)
Request Method: | GET |
---|---|
Request URL: | http://127.0.0.1:8000/templates/description.html |
Using the URLconf defined in MySite.urls
, Django tried these URL patterns, in this order:
- ^$
- ^$
The current path, templates/description.html
, didn't match any of these.
You're seeing this error because you have DEBUG = True
in your Django settings file. Change that to False
, and Django will display a standard 404 page.
二、错误描述
我的功能是点击一个按钮从index页面跳转到description页面,但是不管我怎么改路径总是报错。
以下是我的代码(按按钮跳转),按这个按钮可以跳转到description的页面。
<a href="/templates/description.html">
<button>跳转</button>
</a>
我的urls和view都配置好了的。
三、错误代码
在我的urls.py中,我的代码是
from django.conf.urls import url
from . import view
urlpatterns = [
url(r'^$', view.index), #^$意思是以任意字母开头
url(r'^$', view.des),
]
对应的view.py里面是
from django.shortcuts import render
def index(request):
return render(request, 'index.html')
def des(request):
return render(request, 'description.html')
我本来的想法是,一打开127.(省略)就进入主页,然后在后面点击按钮进入description页面。
四、错误原因
关键在于对urls.py里面的urlpatterns的理解错误,按照我的错误代码电脑解析的是遇见第一个任意的url,执行view中的index类,因此跳转到index页面,而我这里的第二个url(r'^$')不会有机会执行!因此电脑会报错!因为电脑在解析按钮跳转的<a>时,根据urlpatterns按顺序匹配到的是第一个,执行的是index类,而在index类中没有description.html,因此报错找不到!
五、错误改正
知道了错误原因就很好办了,将urls.py中的第二个url改成
url(r'^templates', view.des),
即修改后的urls.py为
from django.conf.urls import url
from . import view
urlpatterns = [
url(r'^$', view.index),
url(r'^templates', view.des), #意思是以templates开头的路径
]
这样在遇到<a href="/templates/description.html">时系统会自行匹配到第二个url,因此会执行view中的des类,页面就可以跳转了。