Входной элемент django error css class

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

Ответ 1

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

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

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

Это позволяет вам предоставить необходимый интерфейс без изменения вида и кода формы django.

Ответ 2

Теперь легко - новая функция в Django 1.2

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

class MyForm(forms.Form):
    required_css_class = "required"
    error_css_class = "error"

Ответ 3

Если вы хотите поместить свой 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

Ответ 4

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

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

Я использую следующий настраиваемый шаблон для их класса как "error_id".

@register.filter(is_safe=True)
@stringfilter
def error_id(value):
    if value=='':
        return ''
    else:
        return r'<span class="error_id">'+value+'</span>'

Измените отдельные ошибки в шаблоне, используя:

{{ 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>

Ответ 5

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

Вы можете сделать это с помощью Django Uni Form