Django中如何利用表单action属性结合对象pk?
解决方案
你可以通过Django的模板URL标签{% url %}来指定表单的action属性,同时将当前对象的pk传递进去,具体实现如下:
方法一:利用视图上下文传递pk
在类视图中把pk传入模板上下文
在你的ObjectView类里,重写get_context_data方法,将URL中捕获的pk添加到模板可用的上下文:class ObjectView(View): # 保留原有的get、post方法 def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # 从视图的kwargs中提取pk,传递给模板 context['target_pk'] = self.kwargs['pk'] return context修改表单的action属性
在模板里用{% url %}标签生成对应URL,替换空的action:<form action="{% url 'app:add' target_pk %}" method="post"> {% csrf_token %} {{ form }} <input type="submit" value="Invite"> </form>
方法二:直接调用视图的kwargs(更简洁)
如果你的类视图是Django通用视图(如DetailView、FormView),或者自定义视图已继承相关基类,可以直接在模板中通过view.kwargs.pk获取URL中的pk值,省去重写get_context_data的步骤:
<form action="{% url 'app:add' view.kwargs.pk %}" method="post"> {% csrf_token %} {{ form }} <input type="submit" value="Invite"> </form>
注意事项
- 确保
{% url %}中的命名空间(app:)和URL名称(add)与urls.py里的配置完全匹配(你提供的跳转链接里用了add_users,这可能是笔误,建议统一为URL配置的add)。
内容的提问来源于stack exchange,提问作者user22002675
相关产品推荐
相关产品推荐

