Ошибка ввода элемента Django класса CSS - PullRequest
10 голосов
/ 04 февраля 2010

Я хотел бы знать, как я могу добавить класс .error к элементам ввода ( к приложению регистрации ), когда проверка формы не удалась.

Ответы [ 5 ]

27 голосов
/ 24 ноября 2011

Если вы хотите разместить свой CSS-класс ошибки для формирования входных виджетов (не их контейнеров), вы можете получить класс формы из следующего:

class StyledErrorForm(forms.Form):
    def is_valid(self):
        ret = forms.Form.is_valid(self)
        for f in self.errors:
            self.fields[f].widget.attrs.update({'class': self.fields[f].widget.attrs.get('class', '') + ' error'})
        return ret
26 голосов
/ 13 ноября 2010

Теперь это просто - новая функция в Django 1.2

Просто добавьте атрибут в класс формы, и все готово. Эта функция упоминается в документации под примечанием «Новое в 1.2», но вы можете найти магию на django.forms.forms.BoundField.css_classes Вот справочник API и пример:

class MyForm(forms.Form):
    required_css_class = "required"
    error_css_class = "error"
6 голосов
/ 11 февраля 2010

Это можно сделать полностью через ваш шаблон.

Вы создаете шаблон формы для каждого поля формы, которое вы хотите проверить, вы можете использовать следующий пример конструкции

<input type="text" class="reg-txt{% if form.fieldname.errors %} errors{% endif %}"/>

Это позволяетВы предоставляете нужный интерфейс без изменения кода формы view & django.

1 голос
/ 30 марта 2013

Использование собственного шаблона ...

Лично мне никогда не удавалось использовать встроенные в Django решения для классификации ошибок, и, кроме того, мне нравится использовать встроенный фильтр шаблонов 'striptags' для ошибокизбавиться от всего html-списка, который я все равно не могу понять, как правильно визуализировать.

Я использую следующий пользовательский шаблон, чтобы классифицировать их как «error_id».отдельные ошибки в вашем шаблоне, используя:

{{ form.my_field.errors|striptags|error_id}}

Или визуализируйте всю форму, используя что-то вроде:

    <table border="1" cellpadding="5px" align="center">
        {% for field in form.visible_fields %}
            <tr>
                        <td> {{ field.label_tag }}: </td>
                        <td>    {{ field }}  </td>
                        <td> {{ field.errors|striptags|error_id }} </td>
            </tr>

        {% endfor %}

    </table>
0 голосов
/ 15 октября 2010

(лучше поздно, чем никогда)

Вы должны быть в состоянии сделать это с Форма Джанго Уни

...