Django配置urls与views后点击导航跳转404但直接输入URL可访问如何解决
问题原因
你的故障是导航栏链接使用了相对当前路径的短写格式,与Django的路由匹配规则不匹配导致的,同时你的代码还存在几个明显的语法/配置疏漏。
修复步骤
1. 修正urls.py的路由规则
Django默认开启APPEND_SLASH配置,会自动将无尾斜杠的请求重定向到带尾斜杠的地址,为了避免匹配异常,给所有路由规则加上尾斜杠:
from django.urls import path, include from django.conf.urls.static import static from . import views urlpatterns = [ path('', views.homepage, name='homepage'), path('publications/', views.publications, name='publications'), path('alumni/', views.alumni, name='alumni'), path('contact/', views.contact, name='contact'), path('joinus/', views.joinus, name='joinus'), path('phdstudents/', views.phdstudents, name='phdstudents'), path('pi/', views.pi, name='pi'), path('project1/', views.project1, name='project1'), path('research/', views.research, name='research'), path('researchers/',views.researchers, name='researchers'), path('shiladit/', views.shiladit, name='shiladit'), path('students/', views.students, name='students'), path('team/', views.students, name='team'), ]
2. 修正模板内导航栏的链接写法
你现在用的Bootstrap模板里的导航链接应该是类似<a href="publications">的相对路径写法,这种写法在非首页的页面点击时,会把当前页面路径和链接地址拼接,比如你在/pi/页面点击就会跳转到/pi/publications/,自然触发404。两种修正方案选一个即可:
- 简单方案:给所有导航链接的href属性开头加斜杠,改成绝对路径格式,比如
<a href="/publications/"> - 规范方案(更推荐,后续改路由前缀也不会失效):用Django内置的url模板标签匹配你定义的路由name,比如
<a href="{% url 'publications' %}">,其他路由同理替换成对应的name值即可。
3. 修复代码疏漏
- 你的views.py里重复定义了
publications函数,删掉多余的那个即可 - urls.py里定义了
shiladit、students两个路由对应的视图函数,你在views.py里没有实现,需要补上对应的函数,否则访问这两个地址会报错 - 检查views里的模板路径是否正确,比如
joinus.html如果是放在lab文件夹下,需要写成lab/joinus.html
内容的提问来源于stack exchange,提问作者user16668992
相关产品推荐
相关产品推荐

