django - 更改表单的结构,使输入超出标签

时间:2016-11-01 14:09:00

标签: django forms django-templates

我们如何更改表单的结构以使输入超出标签 当我的表单渲染将显示如下:

<p>
<label for="id_form-0-food_name_0"><input checked="checked" id="id_form-0-food_name_0" name="form-0-food_name" value="" type="radio"> (Nothing)</label>
<label for="id_form-0-food_name_1"><input id="id_form-0-food_name_1" name="form-0-food_name" value="1" type="radio"> خوراک مرغ</label>
<label for="id_form-0-food_name_2"><input id="id_form-0-food_name_2" name="form-0-food_name" value="2" type="radio"> خوراک لوبیا</label>
<label for="id_form-0-food_name_3"><input id="id_form-0-food_name_3" name="form-0-food_name" value="3" type="radio"> فسنجون</label>
</p>

但是我需要从input s标记中进行label渲染。像这样:

<p>
<input checked="checked" id="id_form-0-food_name_0" name="form-0-food_name" value="" type="radio"><label for="id_form-0-food_name_0"> (Nothing)</label>
<input id="id_form-0-food_name_1" name="form-0-food_name" value="1" type="radio"><label for="id_form-0-food_name_1"> خوراک مرغ</label>
<input id="id_form-0-food_name_2" name="form-0-food_name" value="2" type="radio"><label for="id_form-0-food_name_2"> خوراک لوبیا</label>
<input id="id_form-0-food_name_3" name="form-0-food_name" value="3" type="radio"><label for="id_form-0-food_name_3"> فسنجون</label>
</p>

我的forms.py:

class Reserve(ModelForm):
    food_name = forms.ModelChoiceField(
        queryset=Food.objects.all(), 
        widget=forms.RadioSelect(renderer=RadioFieldWithoutULRenderer), 
        empty_label="(Nothing)",
        # label=''
        )
    class Meta:
        model = Reservation
        fields = ('food_name',)

form.html

<form method="post">
{% csrf_token %}

{% for form in formset %}

<p>
  <input name="group1" type="radio" id="test1" value="" />
  {{ form.food_name  }}
</p>

{% endfor %}

<button type="submit" class="btn btn-default">Submit</button>

1 个答案:

答案 0 :(得分:0)

As shown in this question,您可以使用自定义模板创建自己的窗口小部件:

  1. 在模板文件夹中创建模板文件(例如 my_project / my_app / templates / my_app / widgets / radio_option.html ):
{% include "django/forms/widgets/input.html" %}{% if widget.wrap_label %}<label{% if widget.attrs.id %} for="{{ widget.attrs.id }}"{% endif %}>{{ widget.label }}</label>{% endif %}

(此模板是从 django / forms / templates / django / forms / widgets / input_option.html 复制并稍加修改的,该模板默认用于收音机小部件。)

  1. 在您的应用中创建自定义小部件:
class MyRadioSelect(django.forms.RadioSelect):
    option_template_name = "my_app/widgets/radio_option.html"
  1. 使用MyRadioSelect代替RadioSelect