You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django传pk生成的doc.html页面点击登出触发ValueError如何解决

错误原因

你遇到的报错核心是相对路径跳转 + 路由匹配规则的问题:

  • 登出按钮使用了相对路径logout,当你处于/doc/[pk值]这个二级路径页面时,点击按钮会将路径拼接为/doc/logout,而非你预期的根路径下的/logout
  • 你的URL配置中doc/<str:pk>路由会匹配所有doc/开头的路径,将后面的logout当做pk参数传给DocDetailView,而DetailView需要数值类型的id查询Laws表,拿到字符串logout就抛出了类型错误。

修复方案

方案1(推荐,彻底解决所有页面的登出路径问题)

修改consult_home.html中的登出按钮,使用Django模板标签生成绝对路径的登出地址,避免相对路径拼接错误:

<button  type="button" class="button log_out" onclick="location.href='{% url 'logout' %}';">LOGOUT</button> 

{% url 'logout' %}会根据你命名的路由直接生成根路径下的/logout地址,不管当前处于哪一级页面都不会拼接错误。

方案2(优化路由匹配逻辑,避免误匹配)

修改urls.py中doc路由的参数类型,将str改为int,因为你的Laws表的主键id本身就是数值类型,只有数值才会匹配该路由,doc/logout会自动跳过该路由继续匹配:

urlpatterns=[
     path('logout', views.logoutUser, name='logout'),
     path('doc/<int:pk>', DocDetailView.as_view(), name='doc' ),
]

两个方案同时使用最佳,既解决当前登出问题,也避免后续其他类似的路径误匹配问题。

内容的提问来源于stack exchange,提问作者Ritankar Bhattacharjee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:18:01