2009-02-17 2 views
29

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

Répondre

37

Appel mark_safe sur la chaîne de message d'erreur lorsque vous soulevez le ValidationError

+0

'de django.utils.safestring import mark_safe' (Django 1.10) –

10

Vous pouvez le faire sur la définition du champ de formulaire sans avoir besoin de lever un ValidationError niveau de forme 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.")}) 
Questions connexes