我的形式是Django的:如何通過CSS來form.as_ul
class Form(forms.Form):
ability = forms.ChoiceField(widget= forms.CheckboxSelectMultiple(), choices = SKILLS, required=False)
我正在顯示它作爲{{ Form.as_ul }}
我如何通過一個css UL類呢?我可以在模板中的某處做到嗎?不知道這是如何工作的
我的形式是Django的:如何通過CSS來form.as_ul
class Form(forms.Form):
ability = forms.ChoiceField(widget= forms.CheckboxSelectMultiple(), choices = SKILLS, required=False)
我正在顯示它作爲{{ Form.as_ul }}
我如何通過一個css UL類呢?我可以在模板中的某處做到嗎?不知道這是如何工作的
不幸的是,你必須創建一個新的窗口小部件,但可以使用現有的CheckboxSelectMultiple
widget的__init__
和render
功能。
向構造函數添加新的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)))
在您的形式簡單地使用自定義部件:
class Form(forms.Form):
ability = forms.ChoiceField(widget= MyCheckboxSelectMultiple(ul_attrs={"class":"fancybox"}), choices = SKILLS, required=False)
#
您可以通過參數attrs
將HTML屬性傳遞給小部件。另外,請看Django book的chapter 7,尤其是部分定製表格設計。
節傳情:
雖然很方便的爲我們生成表單的HTML,在很多情況下,你會想覆蓋默認的顯示。
{{ form.as_table }}
和朋友在開發應用程序時是有用的快捷方式,但所有關於表單顯示方式的內容都可以被覆蓋,大部分都在模板本身內,您可能會發現自己正在執行此操作。
因爲Django的1.11,您可以Overriding built-in widget templates:
class MyCheckboxSelectMultiple(forms.CheckboxSelectMultiple):
template_name = 'widgets/multiple_input.html'
和複製
django/forms/widgets/multiple_input.html
,其中包括由django/forms/widgets/checkbox_select.html
至
your_app/templates/widgets
目錄。
現在,在your_app/templates/widgets/multiple_input.html
文件中自定義類或樣式。
我在django 1.3中測試它 – Lepi