2009-02-17 21 views
29

Django: Bir form temiz() yönteminden bir django doğrulama hatası için <a> hiperlinkini nasıl koyabilirim? Bir doğrulama hatasını yükseltmek istiyorum ve hata metninde, kullanıcının hatayı düzeltmesine yardımcı olacak bir bağlantıya sahip bir <a href=""></a> köprüsü var. Bu, bir formun temiz bir yönteminde yükselttiğim bir doğrulama hatasıdır. HTML olarak çıkış yapmak için bu doğrulama hatası için HTML'yi işaretlemenin bir yolu var mı? Öyle gibi bir form düzeyi ValidationError yükseltmek gerek kalmadan form alanı tanımı yapabiliriz hata mesajı ipeDjango: Bir form temiz() yönteminden bir django doğrulama hatasına bir <a> köprüsü nasıl koyabilirim?

cevap

37

Çağrı mark_safe Eğer ValidationError

+0

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

10

yükseltiyoruz:

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.")}) 
İlgili konular