Django: Как добавить гиперссылку <a>в ошибку проверки django из метода clean () формы? - PullRequest
31 голосов
/ 17 февраля 2009

Django: Как добавить гиперссылку <a> в ошибку проверки django из метода clean () для форм? Я хочу вызвать ошибку проверки, и в тексте ошибки есть гиперссылка <a href=""></a>, содержащая ссылку, которая поможет пользователю исправить ошибку. Это ошибка проверки, которую я поднимаю в чистом методе формы. Есть ли способ пометить HTML для этой ошибки проверки как безопасный для вывода как HTML?

Ответы [ 2 ]

41 голосов
/ 17 февраля 2009

Вызов mark_safe в строке сообщения об ошибке при поднятии ValidationError

10 голосов
/ 10 июля 2013

Вы можете сделать это в определении поля формы, не повышая уровень формы 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.")})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...