10
votes

Erreur d'élément d'entrée Django CSS Classe

J'aimerais savoir comment puis-je ajouter de la classe .Error aux éléments d'entrée ( à l'application d'enregistrement ) lorsque la validation du formulaire échoue.


0 commentaires

5 Réponses :


6
votes

Ceci peut être fait complètement via votre modèle.

Vous construisez le modèle de formulaire pour chaque champ de formulaire que vous souhaitez tester, vous pouvez utiliser l'exemple suivant Construire P>

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


1 commentaires

Y a-t-il quelque chose qui peut être fait sur la forme ou le niveau de widget? Cela semble plutôt verbeux, je voudrais disposer de cette classe d'erreur sur chaque champ de saisie non valide, Textarea, Sélectionner ...



0
votes

(meilleur tard que jamais)

Vous devriez être capable de le faire avec Django Uni formulaire


0 commentaires

26
votes

C'est maintenant facile - nouvelle fonctionnalité de Django 1.2

Il suffit d'ajouter un attribut sur la classe de formulaire et vous êtes prêt à partir. Cette fonctionnalité est mentionnée dans les documents sous une note "nouvelle dans 1.2", mais vous pouvez trouver la magie à django.forms.forms.boundfield.css_classes code> Voici le Référence API et un exemple: P>

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


5 commentaires

Je cours 1.3 et aucune de ces classes n'est jamais dans la sortie du modèle. Je rends le champ avec le simple {{champ}} dans A pour boucle. Quelque chose de spécial que je dois faire pour faire ce travail? Est-ce que cela ne fonctionne que lorsque vous sortez des tables?


Vous devez émettre le formulaire entier à l'aide de {{formulaire}}, si vous le faites de cette façon, vous verrez les classes dans l'un des formats (p, table et liste).


@Brianisher basé sur votre réponse Cela signifie-t-il que cela signifie soit accepter {{formulaire}} comme pour obtenir la classe d'erreur ou la classe requise souhaitée ou construire vos propres éléments si vous souhaitez un contrôle plus fin sur l'ensemble du formulaire et les classes sur l'erreur?


Oui, ajout requis_css_class ou error_css_class n'affecte que les éléments du conteneur autour d'une étiquette et champ d'entrée lorsque la sortie utilise {{formulaire>. Il fait pas ajoutez les classes au champ d'entrée lui-même (qui est ce que l'op voulait). Voici les documents pour Django 1.7


Django 3.x: Si vous remplacez la méthode propre () , ainsi que dans cette méthode, ajoutez une erreur via self.add_error () (OF Soulever un validationError () exception), error_css_class est ignoré . Ne me demandez pas pourquoi. Dans ce cas, cette réponse ne fonctionne pas, alors que la réponse de Luca fonctionne parfaitement.



32
votes

Si vous souhaitez placer votre erreur CSS CSS pour former des widgets d'entrée (pas leurs conteneurs), vous pouvez dériver votre classe de formulaire à partir de la suivante:

class StyledErrorForm(forms.Form):
     def is_valid(self):
         result = super().is_valid()
         # loop on *all* fields if key '__all__' found else only on errors:
         for x in (self.fields if '__all__' in self.errors else self.errors):
             attrs = self.fields[x].widget.attrs
             attrs.update({'class': attrs.get('class', '') + ' is-invalid'})
         return result


2 commentaires

Faites attention à un petit gotcha, cependant, cela remplace toute classe spécifiée dans la déclaration de widget de terrain (c'est-à-dire des attrs ). Pour simplement ajouter une classe d'erreur, utilisez cette ligne (légèrement horrible): self.fields [f] .widget.attrs.update ({'classe': self.fields [f] .widget.attrs.get (' classe ',' ') +' erreur '})


Votre réponse n'est pas complète, vous avez oublié le __ tout __ . J'ai édité votre réponse pour le corriger, si vous ne l'aimez pas, dis-moi.



1
votes

Utilisation d'un modèle personnalisé ...

Personnellement jamais eu beaucoup de chance en utilisant les solutions intégrées de classement d'erreurs Django, et j'aime bien utiliser le filtre de modèle "StripTags" intégré sur les erreurs, pour vous débarrasser de Toutes les trucs de la liste HTML que je ne peux pas comprendre comment rendre gentiment de toute façon. p>

J'utilise le modèle personnalisé suivant pour les classer comme "ERROR_ID". P>

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


2 commentaires

J'utilise {{champ.errors.join: ""}} Pour afficher les erreurs en ligne au lieu de ul . Et pas de choses HTML.


Vous pouvez appeler des striptags de votre filtre à partir de django.template.defaultfilters.sptags