Si vous ne souhaitez pas ajouter de code au formulaire (comme mentionné dans les commentaires de la réponse de @ shadfc), c'est certainement possible, voici deux options.
Tout d'abord, il vous suffit de référencer les champs individuellement dans le HTML, plutôt que l'ensemble du formulaire à la fois:
<form action="" method="post">
<ul class="contactList">
<li id="subject" class="contact">{{ form.subject }}</li>
<li id="email" class="contact">{{ form.email }}</li>
<li id="message" class="contact">{{ form.message }}</li>
</ul>
<input type="submit" value="Submit">
</form>
(Notez que je l'ai également changé en une liste non triée .)
Deuxièmement, notez dans la documentation sur la sortie de formulaires au format HTML , Django:
L'ID de champ est généré en ajoutant «id_» au nom du champ. Les attributs et balises id sont inclus dans la sortie par défaut.
Tous vos champs de formulaire ont déjà un identifiant unique . Vous feriez donc référence à id_subject dans votre fichier CSS pour styliser le champ sujet . Je dois noter que voici comment le formulaire se comporte lorsque vous prenez la valeur par défaut HTML , ce qui nécessite simplement d'imprimer le formulaire, pas les champs individuels:
<ul class="contactList">
{{ form }} # Will auto-generate HTML with id_subject, id_email, email_message
{{ form.as_ul }} # might also work, haven't tested
</ul>
Voir le lien précédent pour d'autres options lors de la sortie de formulaires (vous pouvez faire des tableaux, etc.).
Remarque - Je me rends compte que ce n'est pas la même chose que d'ajouter une classe à chaque élément (si vous avez ajouté un champ au formulaire, vous devrez également mettre à jour le CSS) - mais il est assez facile de référencer tous les champs par id dans votre CSS comme ceci:
#id_subject, #id_email, #email_message
{color: red;}