Django 构建模板 form 表单的两种方法
本文介绍在 Django 中构建模板表单的两种核心方式:手动定义字段与基于数据表映射。通过具体代码示例,演示如何创建 forms.py 并在视图中传递给模板,实现从基础 Form 到 ModelForm 的灵活应用,帮助开发者快速掌握 Django 表单处理机制。
在常规开发场景中,若需手动构建一张表单,通常会在模板文件 login.html 中直接编写 HTML 代码。
<form action="/your-name/" method="post">
<label for="your_name">Your name: </label>
<input id="your_name" type="text" name="your_name" value="{{ current_name }}">
<input type="submit" value="OK">
</form>
Django 表单生成的两种实现路径
接下来,我们将探讨在 Django 框架下,如何在模板文件中生成 form 表单的具体实现方案。
第一种方案:自定义显示字段。
假设我们需要在模板中生成一张包含 username 和 content 两个字段的表单。
方案一:自定义显示字段
首先,在应用目录下新建 forms.py 文件(路径示例:/users/forms.py)。
from django import forms
class MessageGetForm(forms.Form):
username = forms.CharField(label='用户', max_length=5) #max_length 浏览器限制用户输入的字符串长度
content = forms.CharField(label='留言', max_length=100)
随后,在视图文件中引用上述表单类,并将其传递给模板(路径示例:users/view.py)。
from apps.users.forms import MessageGetForm
class MessageView(View):
def get(self, request, *args, **kwargs):
message = MessageGetForm()
return render(request, "message.html", {"message": message})
最后,在模板文件 message.html 中调用该表单对象。
<form action="" method="get">
{{ message }}
</form>
渲染后的页面效果如图所示。

第二种方案:将数据表的字段映射到模板文件 form 表单。
假设数据表 courses_lesson 的字段结构如下。

方案二:数据表字段映射
同样,在应用目录下新建 forms.py 文件(路径示例:/users/forms.py)。
#此处我们假设你的项目文件courses/models.py内含有Lesson类from apps.courses.models import Lesson
from django.forms import ModelForm
class CoursesLessonForm(ModelForm):
class Meta:
model = Lesson
fields = ['add_time', 'name', 'learn_times'] #要显示的字段
在视图文件中引用上述表单字段,并将其传递给模板(路径示例:users/view.py)。
from apps.users.forms import CoursesLessonForm
class MessageView(View):
def get(self, request, *args, **kwargs):
message = CoursesLessonForm()
return render(request, "message.html", {"message": message})
在模板文件 message.html 中进行调用。
<form action="" method="get">
{{ message }}
</form>
页面渲染效果如图所示。

所有表单类均作为 django.forms.Form 或者 django.forms.ModelForm 的子类来创建。您可以把 ModelForm 想象成 Form 的子类。实际上 Form 和 ModelForm 从(私有) BaseForm 类继承了通用功能,但是这个实现细节不怎么重要。
到此这篇关于 Django 构建模板 form 表单的两种方法的文章就介绍到这了,更多相关 Django 构建模板 form 表单的两种方法内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









