【问题标题】:Django - Customize Form, Specifically how fields lookDjango - 自定义表单,特别是字段的外观
【发布时间】: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>

【问题讨论】:

    标签: html django bootstrap-4 django-templates


    【解决方案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 %}
    

    在标签&lt;div&gt; 中,您将看到标签,并且在表单提交和输入时出现任何错误&lt;div&gt; 将显示带有占位符的名字和姓氏字段。

    【讨论】:

    • 抱歉这么晚才回复。如果我的输入数据之一是复选框怎么办?该复选框现在应该是一个普通的复选框,但它现在显示为一个输入字段
    • 基本上,我将如何指定复选框和文本字段的字段类型?
    • 您可以从字段名称 {% if field.name == "checkbox" %} 显式检查并从 html 标签呈现复选框。
    • 是的!我刚刚这样做了,它有效!感谢您的帮助!
    猜你喜欢
    • 2011-12-02
    • 2023-03-07
    • 2015-06-13
    • 2014-01-12
    • 2017-12-17
    • 2015-09-14
    • 1970-01-01
    • 2021-07-07
    • 2021-06-07
    相关资源
    最近更新 更多