Django出现ValueError: invalid literal for int() with base 10: 'favicon.ico'错误求助
解决
ValueError: invalid literal for int() with base 10: 'favicon.ico' 问题 我一眼就看出问题出在你的URL路由配置上,咱们一步步拆解来解决:
为什么错误里会出现 favicon.ico?
浏览器加载任何网页时,都会自动向服务器请求根目录下的 favicon.ico 文件(用来显示标签页的小图标)。而你的路由里有一个通配符路由:
path('<str:pk>/', web.views.case_detail, name='case_detail'),
这个路由会匹配所有没有被前面路由捕获的请求——包括浏览器发送的 favicon.ico 请求。
错误的核心原因
你的 case_detail 视图应该是把 pk 当作整数来处理的(比如查询 DoxpopCase 模型时,用 pk=int(pk) 去匹配数据库主键),但收到的是字符串 'favicon.ico',自然就抛出了「无法将非数字字符串转成整数」的错误。
解决方案:调整路由的范围与优先级
最直接的修复方式是给案件详情路由加一个明确的前缀,同时限制参数类型,避免它捕获无关请求:
修改你的 urls.py,把案件详情的路由从 <str:pk>/ 改成带前缀的版本,并且指定 pk 为整数类型(更贴合你的模型主键类型):
urlpatterns = [ path('admin/', admin.site.urls), path('', web.views.home, name='home'), path('search/', web.views.search_results, name='search_results'), path('cases/', web.views.view_cases, name='view_cases'), # 关键修改:添加cases前缀,同时指定pk为int类型 path('cases/<int:pk>/', web.views.case_detail, name='case_detail'), path('actor/edit/<int:pk>', web.views.actor_edit, name='actor_edit'), path('address/edit/<int:pk>', web.views.actor_address_edit, name='address_edit'), path('phone/edit/<int:pk>', web.views.actor_phone_edit, name='phone_edit'), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
这样修改后:
- 只有访问
cases/123/这种格式的路径才会触发case_detail视图,不会再捕获favicon.ico请求 <int:pk>还能自动做类型校验,非整数的请求会直接返回404,避免后续视图里的类型转换错误
额外优化(可选)
如果想彻底解决favicon的请求问题,可以在项目的 static 目录下放置一个 favicon.ico 文件,浏览器就能正确获取到图标,不会再产生无效请求。
内容的提问来源于stack exchange,提问作者T3metrics
相关产品推荐
相关产品推荐

