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

如何在Django类视图的现有联系页中添加ModelForm表单

解决方案

1. 修改视图类,整合表单逻辑

在views.py中导入你的ContactForm,然后修改ContactUsPageView,添加表单实例到上下文,并处理表单提交:

from .forms import ContactForm
from django.shortcuts import redirect

class ContactUsPageView(ListView):
    model = SiteDataKeyValue
    template_name: str = "core/contact-us.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["contact_page_data"] = self.model.objects.filter(key__icontains="تماس")
        # GET请求生成空表单,POST请求传入提交的数据
        context["contact_form"] = ContactForm(self.request.POST or None)
        return context

    def post(self, request, *args, **kwargs):
        # 处理表单提交逻辑
        contact_form = ContactForm(request.POST)
        if contact_form.is_valid():
            contact_form.save()
            # 提交成功后重定向回联系页,可替换为自定义成功页
            return redirect("contact-us")  # 替换为你的联系页URL名称
        # 验证失败时返回原页面并携带错误信息
        return self.get(request, *args, **kwargs)

2. 在模板中渲染表单

打开core/contact-us.html,在需要展示表单的位置添加以下代码:

<form method="post">
    {% csrf_token %}
    {{ contact_form.as_p }}  <!-- 快速渲染表单,可根据需求自定义样式 -->
    <button type="submit">提交</button>
</form>

如果需要更精细的字段控制(比如添加自定义CSS类),可以逐个字段渲染:

<form method="post">
    {% csrf_token %}
    <div class="form-field">
        {{ contact_form.first_name.label_tag }}
        {{ contact_form.first_name }}
        {{ contact_form.first_name.errors }}
    </div>
    <div class="form-field">
        {{ contact_form.last_name.label_tag }}
        {{ contact_form.last_name }}
        {{ contact_form.last_name.errors }}
    </div>
    <!-- 其余字段按此格式依次添加 -->
    <button type="submit">提交</button>
</form>

补充说明

  • 若要在提交成功后显示提示信息,可以在重定向时添加URL参数,或在get_context_data中加入成功标记
  • 表单验证失败时,错误信息会自动传递到模板,通过{{ contact_form.field_name.errors }}可获取对应字段的错误提示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:40:25