默认的django ChoiceInput输出<input>
标签内的<label>
。我被要求在DOM中的同一级别输出它们,因此编写了一个自定义渲染器。
该字段未呈现安全的HTML,因此在浏览器中我只看到字段标签,然后是选择的原始html。
我查看了我继承的ChoiceFieldRenderer
&amp;它的render函数返回一个mark_safe()
字符串,为什么我的字段只呈现原始HTML?
我的表单字段被声明为;
class SignupForm(forms.ModelForm):
my_field = forms.NullBooleanField(
widget=forms.widgets.RadioSelect(
choices=FIELD_CHOICES,
renderer=MyRadioFieldRenderer
),
required=True,
initial=True
)
我的自定义渲染器;
class MyChoiceInput(forms.widgets.ChoiceInput):
def render(self, name=None, value=None, attrs=None, choices=()):
if self.id_for_label:
label_for = format_html(' for="{0}"', self.id_for_label)
else:
label_for = ''
return format_html(
'{0}<label{1}>{2}</label>', self.tag(), label_for, self.choice_label
)
class RadioChoiceInput(MyChoiceInput):
input_type = 'radio'
def __init__(self, *args, **kwargs):
super(RadioChoiceInput, self).__init__(*args, **kwargs)
self.value = force_text(self.value)
class MyRadioFieldRenderer(forms.widgets.ChoiceFieldRenderer):
choice_input_class = RadioChoiceInput