渲染输入&使用Django ChoiceInput在相同的DOM级别标记标记

时间:2015-07-02 01:51:39

标签: python django

默认的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

0 个答案:

没有答案