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

如何在Class-Based Views中传递表单数据并遍历字段?

在Django类视图(CBV)中循环输出表单字段标签与值

当然可以!类视图(CBV)里完全能复用你在函数视图(FBV)里用的循环写法,核心是确保表单实例被传递到模板上下文里,之后模板里的写法和FBV几乎一致。

1. 使用FormView类视图的场景

如果是处理表单提交/展示的场景,直接用FormView并指定form_class,视图会自动把表单实例传入模板的form变量中:

from django.views.generic import FormView
from .forms import YourCustomForm

class SampleFormView(FormView):
    form_class = YourCustomForm
    template_name = 'form_template.html'
    success_url = '/submit-success/'

模板form_template.html里直接循环表单字段即可:

{% for field in form %}
    <p>{{ field.label_tag }} : {{ field.value }}</p>
{% endfor %}

2. 展示模型实例数据的场景(比如DetailView/UpdateView)

如果是要展示已有模型数据的表单(比如详情页展示数据、更新页预填数据),可以在get_context_data方法里手动初始化表单并传入上下文:

from django.views.generic import DetailView
from .models import YourModel
from .forms import YourCustomForm

class ModelDetailView(DetailView):
    model = YourModel
    template_name = 'detail_template.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # 用当前模型实例初始化表单
        context['form'] = YourCustomForm(instance=self.object)
        return context

模板里依然用相同的循环代码,就能自动输出所有字段的标签和对应值。

补充说明

  • field.value会根据场景自动取值:未提交的表单显示初始值/模型实例值,提交后的表单显示用户输入的内容。
  • 如果只是纯展示模型数据不需要表单功能,也可以直接循环模型实例的_meta.fields,但用表单循环的方式更统一,还能复用表单的标签定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:37:01