Django: формы и пользовательские шаблоны - PullRequest
2 голосов
/ 15 июля 2011

основная проблема: мне нужно создать настоящие настроенные шаблоны для моих форм django.Вот и все.Я привык стилизовать формы, основываясь на выводе django.На этот раз все по-другому, шаблон html / css уже готов (за несколько месяцев до того, как меня наняли), и я не могу его изменить, поэтому мне нужно, чтобы django вывел именно этот HTML-код.

Я много читал черезdjango docs, и я нашел много, но я должен признать, что я не мог класть кусочки и куски вместе с порядком, чтобы делать то, что мне нужно.

Теперь, с CheckboxSelectMultiple, вывод htmlthis:

<ul>
   <li><input type='checkbox' ...></li>
   ...
</ul>

Что мне действительно нужно сделать, это создать что-то вроде CustomCheckboxSelectMultiple для вывода именно этого шаблона:

<ul class="list">
    <li class="list-item"><input class="checkbox" type="checkbox" id="..." /><label class="label" for="">...</label></li>
...
</ul>

И так далее для других типов виджетов форм.Это единственный способ, которым я могу придумать для создания моих форм с той конкретной компоновкой, которую они мне дали.

Я на самом деле застрял в этом, я не могу собрать все вместе, чтобы начать кодировать мои формы.Как я могу справиться с этим?Если у вас есть какой-либо пример, это будет здорово!В противном случае, просто укажите мне правильное направление, пожалуйста ... к сожалению, просмотр документов, как я уже говорил, на самом деле не помог мне

Спасибо всем заранее!

1 Ответ

2 голосов
/ 15 июля 2011

вы должны создать подкласс класса CheckboxSelectMultiple и переопределить метод рендеринга следующим образом:

class CustomCheckboxSelectMultiple (CheckboxSelectMultiple):
    """
    A custom CheckboxSelectMultiple Widget that render specific html
    """
    def __init__(self, attrs={}):
        super(CustomCheckboxSelectMultiple, self).__init__(attrs)

    def render(self, name, value, attrs=None):
        #Here the custom code

См. Оригинальный источник CheckboxSelectMultiple, чтобы узнать, как создать новый метод.

После этого ваш сигнал переопределится в вашей Форме

class MyCustomForm(forms.Form):
    formfield_overrides = {
        models.CheckboxSelectMultiple : {'widget': CustomCheckboxSelectMultiple }
    }

И теперь все ваши MyCustomForm будут использовать ваш конкретный виджет для всех CheckboxSelectMultiple в нем.

...