2009-02-17 40 views
29

Django:我怎样才能把一个<a>超链接从一个表单clean()方法的django验证错误?我想提出一个验证错误,并且在错误文本中有一个超链接,它有一个链接可以帮助用户纠正错误。这是我在表单的一个干净方法中提出的验证错误。有没有一种方法可以将该验证错误的HTML标记为可安全输出为HTML?Django:我怎么能把一个<a>超链接从一个表单clean()方法的django验证错误?

回答

37

上的错误消息字符串呼叫mark_safe当你提高ValidationError

+0

从` django.utils.safestring import mark_safe` (Django 1.10) – 2016-09-25 21:42:36

10

你可以做到这一点的表单字段定义,而不需要提出一个表单级别ValidationError像这样:

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