Django: Comment puis-je mettre un lien hypertexte dans une erreur de validation django à partir d'une méthode forms clean ()?

Django: Comment puis-je mettre un lien hypertexte <a> dans une erreur de validation django à partir d'une méthode forms clean ()? Je veux déclencher une erreur de validation, et dans le texte d'erreur avoir un lien hypertexte <a href=""></a> qui a un lien qui aiderait l'utilisateur à corriger l'erreur. C'est une erreur de validation que je soulève dans une méthode propre d'un formulaire. Existe-t-il un moyen de marquer le code HTML pour cette erreur de validation aussi sûr à afficher que HTML?

30
demandé sur MikeN 2009-02-17 18:06:16

2 réponses

Appeler mark_safe sur la chaîne de message d'erreur lorsque vous déclenchez le ValidationError

39
répondu Jonny Buchanan 2009-02-17 15:17:58

Vous pouvez le faire sur la définition du champ de formulaire sans avoir besoin d'augmenter une ValidationError de niveau de formulaire comme ceci:

class RegistrationForm(ModelForm):
    ...

    ### Django established methods
    # form wide cleaning/validation
    def clean_email(self):
        """ prevent users from having same emails """
        email = self.cleaned_data["email"]
        try:
            User.objects.get(email__iexact=email)
            raise forms.ValidationError(
                    mark_safe(('A user with that email already exists, click this <a href="{0}">Password Reset</a> link'
                            ' to recover your account.').format(urlresolvers.reverse('PasswordResetView')))
                            )
        except User.DoesNotExist:
            return email

    ...

    ### Additional fields
    location = forms.RegexField(max_length=255,
        regex=r"^[\w' -]+, [\w'-]+, [\w'-]+, [\w'-]+$", #ex 1 Mclure St, Kingston, Ontario, Canada
        help_text="location, ex: Suite 212 - 1 Main St, Toronto, Ontario, Canada",
        error_messages={
            'invalid': mark_safe("Input format: <strong>suite - street</strong>, <strong>city</strong>, " 
                                "<strong>province/state</strong>, <strong><u>country</u></strong>. Only letters, "
                                "numbers, and '-' allowed.")})
10
répondu Daniel Sokolowski 2014-02-01 21:40:29