Django如何从HTML模板传值到Python函数并按按钮触发对应视图
Django表单多按钮提交实现方案
第一步:修改HTML模板代码
首先需要给三个提交按钮添加相同的name属性,后端才能识别用户点击了哪个按钮,修改后的模板代码如下:
<form method="POST" action=""> {% csrf_token %} <input type="text" name="name_id" placeholder="placeholder value"/> <input type="submit" name="submit_type" value="Value 1"/> <input type="submit" name="submit_type" value="Value 2"/> <input type="submit" name="submit_type" value="Value 3"/> </form>
第二步:配置应用下的urls.py
不需要为三个按钮单独配置路由,所有提交请求都走同一个处理接口即可,示例配置如下:
from django.urls import path from . import views urlpatterns = [ # 你现有的其他路由 path('form-process/', views.form_process, name='form_process'), ]
如果表单页面就是该路由返回的,form标签的action属性可以留空;否则请把action改为{% url 'form_process' %}。
第三步:编写views.py处理逻辑
在视图函数中先获取输入框内容和提交按钮的value值,再分支执行对应函数即可:
from django.shortcuts import render # 自定义的三个功能函数,按需修改内部逻辑 def func1(input_content): print(f"执行函数1,接收参数:{input_content}") def func2(input_content): print(f"执行函数2,接收参数:{input_content}") def func3(input_content): print(f"执行函数3,接收参数:{input_content}") def form_process(request): # GET请求直接返回表单页面 if request.method == "GET": return render(request, 'file.html') if request.method == "POST": # 获取输入框内容,默认值为空字符串 input_content = request.POST.get('name_id', '') # 获取点击的提交按钮的value submit_btn = request.POST.get('submit_type', '') # 按按钮值分支执行对应函数 if submit_btn == "Value 1": func1(input_content) elif submit_btn == "Value 2": func2(input_content) elif submit_btn == "Value 3": func3(input_content) # 处理完成后的返回逻辑按需修改,可改为重定向、返回JSON等 return render(request, 'file.html', {'tip': '操作完成'})
注意事项
- 若输入框为必填项,可自行添加非空校验逻辑,避免空值传入函数
- 若需要保留用户上次输入的内容,返回渲染页面时把
input_content传到模板,赋值给输入框的value属性即可 - 三个功能函数如果涉及数据库操作、文件读写等逻辑,可自行补充异常捕获处理
内容的提问来源于stack exchange,提问作者user15036284
相关产品推荐
相关产品推荐

