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

Django 2.0中re_path搭配<str:pk>在CreateView失效,求原因及解决方法

问题原因与解决办法

别担心,新手刚接触Django路由的时候踩这个坑太正常啦!咱们来一步步拆解问题:

核心原因

你混淆了Django里两种路由函数的语法:

  • re_path() 是基于正则表达式的路由写法,它不支持 <str:pk> 这种路径转换器语法(这是 path() 函数专属的)。
  • <str:pk> 是 path() 用来捕获URL参数的简洁写法,没法直接在正则路由里用。

两种解决办法

方法1:换成推荐的 path() 函数(更简单)

Django 2.0+ 官方更推荐用 path() 处理常规路由,你的写法只需要把 re_path 改成 path 就能正常工作:

path('<str:pk>/', indexView.as_view(), name='index')

方法2:如果坚持用 re_path(),改用正则命名分组

如果你的场景确实需要正则表达式的灵活性,就得用正则的命名捕获分组语法来替代路径转换器:

re_path(r'^(?P<pk>[^/]+)/$', indexView.as_view(), name='index')

这里 (?P<pk>[^/]+) 的意思是:

  • (?P<pk>...):给捕获到的内容命名为 pk,这样视图里就能通过 self.kwargs['pk'] 获取到这个参数
  • [^/]+:匹配任意非斜杠的字符,和 <str:pk> 的效果一致

小提示

如果没有特别复杂的正则匹配需求,优先用 path() 就好,它的语法更直观,不容易出错~

内容的提问来源于stack exchange,提问作者Mohamed Benkedadra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:04:35