如何在Django CreateView类中获取模板url标签传递的URL参数
解决方案
Django 基于类的视图中,所有在urls.py中定义的路径参数都会被解析后存入视图实例的self.kwargs字典属性中,你可以直接在get_initial方法中调用该属性获取参数值。
代码修改示例
1. 直接适配现有代码(保留当前urls.py的参数名)
你的urls.py中定义的路径参数名为something,直接从self.kwargs中取对应key的值即可:
# views.py class SubObjectCreateView(generic.CreateView): model = SubObject # 其他原有配置... def get_initial(self): # 先调用父类方法获取默认初始值,避免原有逻辑被覆盖 initial = super().get_initial() # 从URL路径参数中取值赋值给指定字段 initial['object'] = self.kwargs['something'] return initial
2. 优化建议(语义化参数名,提升代码可维护性)
建议把urls.py中的参数名改为和业务含义匹配的名称,避免后续维护混淆:
# urls.py修改后 path('subobject/<int:object_id>', views.SubObjectCreateView.as_view(), name='url_name')
对应views.py中的取值逻辑修改为:
initial['object'] = self.kwargs['object_id']
补充说明
- 如果
object是SubObject的外键字段,直接传入关联对象的主键值即可,Django表单会自动完成外键关联匹配 - 模板中的传参逻辑不需要修改,
{% url 'url_name' object.id %}已经正确把object.id作为路径参数传入URL
内容的提问来源于stack exchange,提问作者achermaj
相关产品推荐
相关产品推荐

