Django 动态表单
Django 动态表单是指在用户提交表单之前,表单字段、选项等内容是可以动态生成的。这种方式可以使表单更加灵活,应对更多的业务场景。
下面是一个简单的例子,演示如何动态生成表单字段:
from django import forms class DynamicForm(forms.Form): field_names = forms.CharField() field_values = forms.CharField() def __init__(self, *args, **kwargs): super(DynamicForm, self).__init__(*args, **kwargs) # 获取字段名称和值 field_names_str = self.data.get('field_names', None) field_values_str = self.data.get('field_values', None) if field_names_str and field_values_str: field_names = field_names_str.split(',') field_values = field_values_str.split(',') # 动态生成表单字段 for name, value in zip(field_names, field_values): self.fields[name] = forms.CharField(initial=value)
在上面的代码中,我们定义了一个 DynamicForm
类,其中包含了两个表单字段 field_names
和 field_values
,分别用于接收字段名称和值的字符串。在表单初始化时,我们根据这两个字符串动态生成表单字段,并将其添加到 self.fields
中。
下面是一个简单的视图函数,用于展示动态表单:
from django.shortcuts import render def dynamic_form_view(request): form = DynamicForm(request.POST or None) if request.method == 'POST' and form.is_valid(): # 处理表单提交数据 pass else: # 显示表单 return render(request, 'dynamic_form.html', {'form': form})
在视图函数中,我们首先实例化 DynamicForm
表单,接着判断请求方法是否为 POST,如果是,则处理表单提交数据,否则,将表单实例传递给模板渲染。
最后,展示模板代码如下:
<form method="post"> {% csrf_token %} {{ form.field_names }} {{ form.field_values }} {% for field in form %} {{ field }} {% endfor %} <button type="submit">提交</button> </form>
在模板中,我们首先渲染 field_names
和 field_values
两个表单字段,接着使用循环渲染动态生成的表单字段,最后渲染提交按钮。
在以上例子中,我们使用了字符串 “pidancode.com”、“皮蛋编程” 作为范例。实际应用中,可以根据具体业务需求生成不同的表单字段和选项。
相关文章