You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django视图中获取hx-include传递的参数

Django CreateView获取hx-include传递参数问题解决

问题背景

在Django的CreateView中尝试获取由hx-include传递的参数,但所有尝试的方法均无效。

涉及的HTML代码

第一个按钮

<button
  id="deleteService"
  hx-post="{% url 'planner:create' %}"
  hx-include="[name='id']"
  type="button"
  class="btn btn-light btn-outline-black btn-sm"
  name="delete"
>Elimina</button>

第二个按钮

<button
  hx-include="[name='{{ venue }}']"
  type="submit"
  class="btn btn-primary btn-lg">
  Submit
</button>

尝试的代码与错误

尝试过以下代码获取参数:

self.request.POST['name']
self.request.POST['id']
self.request.POST.get['name']
self.request.POST.get('name')

出现的错误:

  • 使用self.request.POST.get['name']时:TypeError: 'method' object is not subscriptable
  • 不使用.get直接取值时:django.utils.datastructures.MultiValueDictKeyError: 'name'

解决方案

1. 修正语法错误

self.request.POST.get['name']是语法错误,.get是字典方法,必须用括号调用,正确写法是:

self.request.POST.get('name')
# 或设置默认值避免KeyError
self.request.POST.get('name', None)

2. 确认hx-include选择器有效性

  • 第一个按钮的hx-include="[name='id']":确保页面中存在**name属性为'id'**的表单元素(比如<input type="hidden" name="id" value="123">),否则hx-include无法找到元素,不会传递该参数。
  • 第二个按钮的hx-include="[name='{{ venue }}']":检查模板变量{{ venue }}渲染后的实际值,比如渲染后是否为[name='venue_id'],同时确认页面存在对应name属性的元素。

3. 确认参数键名,按需取值

  • 如果hx-include的是name为'id'的元素,参数键是id,应使用:
    self.request.POST.get('id')
    
  • 第二个按钮传递的参数键是{{ venue }}渲染后的名称,比如渲染后是venue_id,则使用:
    self.request.POST.get('venue_id')
    

4. 调试确认请求参数

在CreateView的方法(如form_valid)中打印完整POST数据,确认实际传递的参数:

def form_valid(self, form):
    print(self.request.POST)  # 查看所有POST参数
    # 其他逻辑
    return super().form_valid(form)

同时可通过浏览器开发者工具的Network标签,查看POST请求的Form Data,确认参数是否被正确传递。

内容的提问来源于stack exchange,提问作者Restea Elias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 13:25:33