更改DJango模板中使用的标签和输入字段(来自模型表单)的外观

时间:2017-12-09 00:41:57

标签: django templates

我正在使用下面的脚本(位于DJango模板中)来显示与特定Y0相关联的i0。此模板的目的是添加和修改模型的数据。

模板的名称是:model_name_form.html(例如:customer_form.html用于表Customer的Model表示)

为了添加/修改数据,正在使用input fields

问题在于,当使用下面的脚本时,字段将使用一种默认表示。就我而言,字段需要更加自定义。

自定义Model FormModel Form使表单看起来更好。

我从这开始(在显示表单的模板中):

labels

这就变成了这个:

input fields

但我们需要的是类似于以下内容的标签/输入演示文稿:

   {% for field in form %}
        <div class="form-group">
            <div class="col-sm-offset-2 col-sm-10">
                <span class="text-danger small"> {{ field.errors }} </span>
            </div>
            <label class="control-label col-sm-2"> {{ field.label_tag }} </label>
            <div class="col-sm-10"> {{ field }} </div>
        </div>
    {% endfor %}

如何控制与以下相关联的属性:

<div class="form-group">

   <div class="col-sm-offset-2 col-sm-10">

     <span class="text-danger small">  
     </span>

   </div>

   <label class="control-label col-sm-2"> 
      <label for="id_companyname">Company Name:</label> 

   </label>
   <div class="col-sm-10"> 

      <input name="companyname" id="id_companyname" type="text" maxlength="30"> 

   </div>

</div>

例如,可以看到上面的内容,<div class="form-group"> <label>Default Input Group</label> <div class="input-group"> <input class="form-control" placeholder="Username" aria-describedby="sizing-addon1" type="text"> <span class="input-group-addon" id="sizing-addon1">@</span> </div> </div> 生成

{{ field.errors }}
{{ field.label_tag }}
{{ field }}  <<< especially this one

但我们需要的是:

{{ field }}

如何控制标签和输入字段的显示方式?

TIA

2 个答案:

答案 0 :(得分:0)

您可以使用窗口小部件属性来更好地控制HTML输出,例如:

class MyModelForm(ModelForm):

     class Meta:
        model = MyModel
        fields = '__all__'
        widgets = {
            'my_field': TextInput(attrs = {
                'placeholder': 'Ingrese el contacto',
                'class': 'form-control',
                'data-validation': 'custom',

            }),
            'my_other_field': Select(attrs = {
                'class': 'form-control selectpicker',
                'data-live-search': 'true',
                'title': 'Elegir un tipo',
                'data-validation': 'required',
                'data-validation-error-msg': 'Debe elegir una de las opciones.',
            }),

在你的情况下,你可以这样做:

        widgets = {
            'my_field': TextInput(attrs = {
                'placeholder': 'Username',
                'class': 'form-control',
                'aria-describedby': 'sizing-addon1',

            }),

要获得更多控制权,您可以使用http://timelessname.com/elfbin/,甚至可以尝试使用库custom template filters,但这会增加一层可能不需要的复杂性。

答案 1 :(得分:0)

我有一个类似的问题,其中默认表单标签缺少空格。我可以通过将forms.py中的默认标签覆盖为空白来解决此问题:

quantity = forms.TypedChoiceField(label='', choices=PRODUCT_QUANTITY_CHOICES) 

,然后在HTML中创建一个新标签。仅仅覆盖forms.py中的标签是行不通的。