Django新手求助:所有访问路径均指向同一页面问题排查
解决Django路由与模板冲突问题
看起来你的问题主要出在路由配置错误和模板文件命名冲突两个地方,咱们一步步来解决:
1. 修复路由配置问题
你现在的主urls.py直接绑定了视图函数,但没有正确引入应用的urls.py,而且缺少根路径的路由规则,这会导致访问根路径时出现异常。另外,你的strategicplan/urls.py还存在路径冗余的问题:
修改主站点urls.py
应该使用include来引入各个应用的路由,这是Django的标准做法,也更便于维护:
from django.urls import path, include # 新增include的导入 urlpatterns = [ path('house/', include('house.urls')), # 引入house应用的路由配置 path('strategicplan/', include('strategicplan.urls')), # 引入strategicplan应用的路由配置 # 给根路径设置默认跳转(可选,比如指向house页面) path('', include('house.urls')), # 也可以用重定向:path('', RedirectView.as_view(url='/house/')), ]
修改strategicplan/urls.py
主路由已经指定了strategicplan/前缀,应用内部的路由不需要重复这个路径,改成空路径即可:
from django.urls import path from strategicplan import views urlpatterns = [ path('', views.index, name='index'), # 去掉前面的strategicplan/ ]
house/urls.py的配置是正确的,保持原样就好。
2. 解决模板文件冲突问题
Django查找模板时,会按照INSTALLED_APPS的顺序遍历各个应用的templates目录。你现在两个应用都有templates/index.html,而strategicplan排在INSTALLED_APPS的前面,所以不管哪个视图渲染index.html,都会优先加载strategicplan的模板。
调整模板目录结构
把模板文件放到应用名的子目录下,这样就能区分不同应用的模板:
- 对于house应用:将
house/templates/index.html移动到house/templates/house/index.html - 对于strategicplan应用:将
strategicplan/templates/index.html移动到strategicplan/templates/strategicplan/index.html
修改视图函数的模板路径
然后在两个应用的views.py里,更新render函数的模板参数:
- house应用的
views.py:
def index(request): return render(request, 'house/index.html') # 添加house/前缀
- strategicplan应用的
views.py:
def index(request): return render(request, 'strategicplan/index.html') # 添加strategicplan/前缀
3. 验证修复效果
做完上面的修改后,重启Django开发服务器:
- 访问
http://127.0.0.1/:会显示house的页面(如果根路径绑定了house路由) - 访问
http://127.0.0.1/house/:正常显示house页面 - 访问
http://127.0.0.1/strategicplan/:正常显示strategicplan页面
这样就能解决你遇到的所有问题啦!
内容的提问来源于stack exchange,提问作者Katie
相关产品推荐
相关产品推荐

