将属性添加到crispy表单django

时间:2015-07-05 06:23:09

标签: django twitter-bootstrap django-crispy-forms

嘿伙计我正在使用自举开关,看起来我想要添加一个我需要的标签:

<input name="switch-labelText" type="checkbox" data-label-text="Label">

我正在使用crispy表单,我可以看到我可以使用Field添加属性,如下所示:

Field('field_name', css_class="black-fields")

这对我来说都很有意义,但我似乎无法添加数据标签文本。所以我的问题是我可以使用crispy表单创建自定义属性吗?

这是我的表格:

class InstanceCreationForm(forms.Form):
    some_field = forms.BooleanField(required=False)
    some_field2 = forms.BooleanField(required=False)
    some_field3 = forms.BooleanField(required=False)

    def __init__(self, *args, **kwargs):
        super(InstanceCreationForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.form_show_labels = False
        self.helper.layout = Layout(
            #This is a syntax error
            Field('some_field', data-label-text="whatever")
        )
        self.helper.add_input(Submit('submit', 'Submit'))

2 个答案:

答案 0 :(得分:4)

来自the docs

  

如果你想设置html属性,用data-name之类的连字符分隔单词,因为Python不支持关键字参数中的连字符,连字符是HTML中的常用符号,下划线将被翻译成连字符,所以你会这样做:   Field('field_name', data_name="whatever")

因此,您需要使用关键字data_label_text

Field('some_field', data_label_text="whatever")

答案 1 :(得分:0)

来自源代码。

    # We use kwargs as HTML attributes, turning data_id='test' into data-id='test'
    self.attrs.update(dict([(k.replace('_', '-'), conditional_escape(v)) for k, v in kwargs.items()]))

它将所有的kwargs放到你的表单元素中,所以你可以做类似的事情。

Field('YOUR_FIELD_NAME', data_label_text="Label")