如何在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
相关产品推荐
相关产品推荐

