Django URL引发ValueError:int()无法解析base10的'add'字面量
解决Django中
ValueError: Invalid literal for int() with base 10: 'add'问题 我一眼就看出问题出在哪了——Django的URL路由是按定义顺序从上到下匹配的!你现在把<pk>这个动态路由放在了add静态路由的前面,当你点击链接访问/add时,Django会先匹配到<pk>这条规则,它会尝试把字符串'add'转换成整数类型的主键(pk),这显然做不到,于是就抛出了你看到的这个错误。
快速修复方案
只需要调整一下URL的顺序,把静态的add路径移到动态的<pk>路径前面,这样Django就会优先匹配到add路由,而不会把它当成主键解析:
from django.contrib import admin from django.urls import path from . import views app_name = 'stories' urlpatterns = [ path('', views.IndexView.as_view(), name='index'), # 把静态路由放在动态路由前面,让Django先匹配它 path('add', views.CreateStory.as_view(), name='add-story'), path('<pk>', views.DetailView.as_view(), name='detail'), # path('<story_id>/ratings', views.rating, name='rating'), ]
额外优化建议
- 按照Django的最佳实践,路由路径最好以斜杠结尾,比如把
path('add', ...)改成path('add/', ...)——不用担心模板里的链接,Django会自动处理带斜杠的重定向,这样更符合Web开发的规范,也能避免一些潜在的路径匹配问题。 - 检查一下你的
CreateStory类里的fields配置:' story_title'前面多了个空格,这可能会导致表单渲染或者数据保存时出现异常,记得把这个空格去掉:
class CreateStory(CreateView): model = Story fields = ['story_title', 'story_content', 'story_rating']
做完这些调整之后,再点击那个链接试试,应该就能正常进入创建故事的页面啦!
内容的提问来源于stack exchange,提问作者Chandimal Harischandra
相关产品推荐
相关产品推荐

