Django - 自定义表单,特别是字段的外观
Posted
技术标签:
【中文标题】Django - 自定义表单,特别是字段的外观【英文标题】:Django - Customize Form, Specifically how fields look 【发布时间】:2021-04-04 08:22:25 【问题描述】:我有一个包含多个字段的表单类。其中之一是名字和姓氏字段。 我的目标是在我的 html 文件中修改我的表单,以便它可以接收输入并将其传递给模型对象。但是,我希望这不会改变我的表单显示方式。问题是当我使用 django 的模板语言时,这些字段的显示方式不同。
我尝试用 django 的模板语言修改名字字段,方法是将以下引导代码替换为 django 模板语言代码:
<div class="form-group col-md-12">
<label for=" form.first_name.id_for_label ">First Name</label>
<input type="text" class="form-control" id="first_name" placeholder="Ex. John">
</div>
已改为:
<div class="form-group col-md-12">
form.first_name.label_tag
form.first_name
</div>
这不起作用。我希望名字字段与姓氏字段显示相同。我该怎么做?
我现在的完整代码:
<div class="form-row">
form.first_name.errors
<div class="form-group col-md-12">
<!--<label for=" form.first_name.id_for_label ">First Name</label>-->
<!--<input type="text" class="form-control" id="first_name" placeholder="Ex. John">-->
form.first_name.label_tag
form.first_name
</div>
</div>
<div class="form-row">
<div class="form-group col-md-12">
<label for="last_name">Last Name</label>
<input type="text" class="form-control" id="last_name" placeholder="Ex. Doe">
</div>
</div>
【问题讨论】:
【参考方案1】:您想要显示名字字段以显示与姓氏字段相同的显示,那么您需要使用相同样式的代码呈现两个字段。
forms.py
from django import forms
from django.core.validators import RegexValidator
class UserForm(forms.Form):
first_name = forms.CharField(widget=forms.TextInput(attrs='placeholder': "first name"), required=True, max_length=50, validators=[ RegexValidator('^[a-zA-Z ]*$', message='Please enter only alphabetical letters')], label=u'First Name')
last_name = forms.CharField(widget=forms.TextInput(attrs='placeholder': 'last name'), required=True, max_length=50,validators=[RegexValidator('^[a-zA-Z ]*$', message='Please enter only alphabetical letters')],label=u'Last Name')
class Meta():
fields = ['first_name', 'last_name']
views.py
from django.shortcuts import render
def render_form(request):
form = UserForm(request.POST or None)
return render(request, 'form.html', 'form': form)
form.html
% for field in form %
<div class="form-group col-md-6">
<label class="col-form-label font-weight-normal">
field.label
% for error in field.errors %
<strong class="text-danger font-weight-normal" style="padding-left: 5px">* error|escape </strong>
% endfor %
</label>
<div>
<input name=" field.name " class="form-control" type="text" value=" field.value|default_if_none:'' "
placeholder="field.field.widget.attrs.placeholder">
</div>
</div>
% endfor %
在标签<div>
中,您将看到标签,并且在表单提交和输入时出现任何错误<div>
将显示带有占位符的名字和姓氏字段。
【讨论】:
抱歉这么晚才回复。如果我的输入数据之一是复选框怎么办?该复选框现在应该是一个普通的复选框,但它现在显示为一个输入字段 基本上,我将如何指定复选框和文本字段的字段类型? 您可以从字段名称 % if field.name == "checkbox" % 显式检查并从 html 标签呈现复选框。 是的!我刚刚这样做了,它有效!感谢您的帮助!以上是关于Django - 自定义表单,特别是字段的外观的主要内容,如果未能解决你的问题,请参考以下文章