Django 4.1.2中CreateView出现join()参数类型错误求助
问题排查与解决
错误根源
你的TechtipCreateView类中,template_name末尾多了一个逗号,导致它变成了元组(tuple),而Django期望接收字符串格式的模板路径。当Django尝试拼接路径时,就会抛出join() argument must be str, bytes, or os.PathLike object, not 'tuple'的错误——这个问题和success_url无关,即使移除success_url,语法错误依然存在。
修复步骤
修改views.py中的TechtipCreateView,去掉template_name行末尾的逗号:
class TechtipCreateView(CreateView): model = Techtip fields = ['title', 'year', 'year2', 'make', 'model', 'description'] template_name = 'techtips/create_techtip.html' # 移除末尾多余的逗号
补充:解决表单提交的success_url问题
修复完上述错误后,你可以重新设置success_url解决最初的表单提交报错,有两种常用方式:
- 直接用
reverse_lazy指定跳转路径:
class TechtipCreateView(CreateView): model = Techtip fields = ['title', 'year', 'year2', 'make', 'model', 'description'] template_name = 'techtips/create_techtip.html' success_url = reverse_lazy('home') # 跳转到urls.py中name为home的首页路径
- 若要跳转到刚创建的Techtip详情页,可重写
get_success_url或为模型配置get_absolute_url:
# 先在models.py的Techtip模型中添加get_absolute_url class Techtip(models.Model): # ... 原有字段 ... def get_absolute_url(self): return reverse('techtip_detail', kwargs={'pk': self.pk}) # 需提前配置详情页URL的name为techtip_detail # 之后在views.py中无需手动设置success_url,CreateView会自动调用get_absolute_url class TechtipCreateView(CreateView): model = Techtip fields = ['title', 'year', 'year2', 'make', 'model', 'description'] template_name = 'techtips/create_techtip.html'
内容的提问来源于stack exchange,提问作者Logan Hawes
相关产品推荐
相关产品推荐

