Django中CreateView无法接收urls.py传递的kwargs,如何解决?
解决方法
你遇到的差异本质是不同类视图的get_context_data方法入参合并逻辑不同,不需要修改urls层的传参逻辑,仅需要调整视图内参数的获取方式即可:
核心方案
Django所有通用类视图都会自动将urls中path()传入的额外参数、路径捕获参数统一存入视图实例的self.kwargs属性中,直接从该属性取值即可:
class OtherClassView(CreateView): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # 仅修改这一行,从self.kwargs取值即可 section = self.kwargs["foo"] # 其余原有逻辑保持不变 return context
差异原因说明
- TemplateView的
get_context_data实现中,会主动将self.kwargs合并到方法入参的kwargs中,所以你可以直接从入参里取到额外参数 - CreateView继承自FormView,它的
get_context_data不会做这个合并,因此入参kwargs中不存在urls传入的额外参数
这个修改完全不需要调整现有传参链路,仅需修改取值的来源即可,成本最低。
内容的提问来源于stack exchange,提问作者logicOnAbstractions
相关产品推荐
相关产品推荐

