django: как передать css в form.as_ul - PullRequest
2 голосов
/ 23 июня 2011

моя форма

class Form(forms.Form):
    ability = forms.ChoiceField(widget= forms.CheckboxSelectMultiple(), choices = SKILLS, required=False)

я отображаю ее как {{ Form.as_ul }}

как мне передать класс css ul этому?Могу ли я сделать это где-нибудь в шаблоне?не уверен, как это работает

Ответы [ 3 ]

7 голосов
/ 23 июня 2011

К сожалению, вам нужно создать новый виджет, но вы можете использовать функции __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)))

В вашей форме просто используйте этот пользовательский виджет:

class Form(forms.Form):
    ability = forms.ChoiceField(widget= MyCheckboxSelectMultiple(ul_attrs={"class":"fancybox"}), choices = SKILLS,    required=False)
    # 
0 голосов
/ 22 ноября 2017

начиная с Django 1.11, вы можете переопределять встроенные шаблоны виджетов

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.

0 голосов
/ 23 июня 2011

Вы можете передать атрибуты HTML в виджет через параметр attrs.Кроме того, взгляните на главу 7 книги Джанго , особенно на раздел Настройка дизайна формы .

Тизер раздела:

Хотя удобно создавать HTML-код нашей формы, во многих случаях вам может потребоваться переопределить рендеринг по умолчанию.{{ form.as_table }} и друзья являются полезными ярлыками при разработке приложения, но все, что касается отображения формы, может быть переопределено, в основном внутри самого шаблона, и вы, вероятно, обнаружите, что делаете это.

...