django:如何将css传递给form.as_ul

ell*_*lly 2 django django-templates django-forms

我的表格是

class Form(forms.Form):
    ability = forms.ChoiceField(widget= forms.CheckboxSelectMultiple(), choices = SKILLS, required=False)
Run Code Online (Sandbox Code Playgroud)

我正在显示它 {{ Form.as_ul }}

我如何将css ul类传递给它?我可以在模板中的某个地方做到吗?不知道这是如何工作的

Lep*_*epi 7

不幸的是,你必须创建一个新的窗口小部件,但可以使用__init__render现有的功能CheckboxSelectMultiple部件.

ul_attrs向构造函数添加新参数.

from django import forms    
from django.forms.util import flatatt
from django.utils.safestring import mark_safe

class MyCheckboxSelectMultiple(forms.CheckboxSelectMultiple):
def __init__(self, attrs=None, ul_attrs=None):
    self.ul_attrs = ul_attrs
    super(MyCheckboxSelectMultiple, self).__init__(attrs)

def render(self, name, value, attrs=None, choices=()):
    html = super(MyCheckboxSelectMultiple, self).render(name, value, attrs, choices)
    final_attrs = self.build_attrs(self.ul_attrs)
    return mark_safe(html.replace('<ul>','<ul%s>' % flatatt(final_attrs)))
Run Code Online (Sandbox Code Playgroud)

在您的表单中只需使用此自定义小部件:

class Form(forms.Form):
    ability = forms.ChoiceField(widget= MyCheckboxSelectMultiple(ul_attrs={"class":"fancybox"}), choices = SKILLS,    required=False)
    # 
Run Code Online (Sandbox Code Playgroud)