Django开发:如何获取模板中被点击提交按钮对应的post主键值
解决方案
最简便的实现方式是调整模板中按钮的属性设置,核心逻辑利用了HTML表单的原生特性:提交表单时仅会将被点击的submit按钮的键值对传入请求参数。
第一步:修改template模板代码
把所有提交按钮的name属性设为同一个固定值,将按钮对应的主键存到value属性中:
{% for post in posts %} <button name="clicked_post_pk" value="{{ post.pk }}" type="submit">{{ post.title }}</button> {% endfor %}
第二步:views中直接获取主键
你不需要再逐一判断键是否存在,直接通过固定的name取值即可:
# 直接拿到被点击按钮对应的主键 post_pk = request.POST.get('clicked_post_pk') # 后续可直接用这个pk查询对应对象执行业务逻辑,建议加合法性校验避免恶意请求 if post_pk: try: target_post = Post.objects.get(pk=post_pk) # 执行你的对应操作 except Post.DoesNotExist: # 处理pk无效的异常情况
备选方案(不修改模板的情况)
如果你不想调整现有模板代码,也可以直接提取request.POST的键,但要注意该方案仅适用于你的表单中没有其他input字段的场景:
# 取POST参数的第一个键即为被点击按钮的name,也就是对应post的主键 if request.POST: post_pk = next(iter(request.POST.keys()))
内容的提问来源于stack exchange,提问作者Samuel
相关产品推荐
相关产品推荐

