XML ParseError: нежелательная после элемента документа: строка 1, столбец 11 в пользовательском валидаторе (Wagtail) - PullRequest
1 голос
/ 30 апреля 2019

Ошибка XML ParseError возникает в методе __call__ валидатора, если в RichTextField в Wagtail CMS введен символ '\ n'.

Здесь происходит ошибка plain_text = ''.join(fromstring(value).itertext())

* 1008 след вызовов TRACEBACK * enter image description here

from xml.etree.ElementTree import fromstring

from django.core.exceptions import ValidationError
from django.utils.deconstruct import deconstructible


@deconstructible
class ProhibitBlankRichTextValidator:
    """
    Validate that the incoming html-string contains plain text characters.

    Common usage: Proper RichTextField validation
    Reason:
        Handling improper RichTextField validation by Wagtail 2.1:
            https://github.com/wagtail/wagtail/issues/4549
    """

    message = "This field is required."

    def __init__(self, message=None):
        if message is not None:
            self.message = message

    def __call__(self, value):
        plain_text = ''.join(fromstring(value).itertext())  # Escape html tags
        if not plain_text:
            raise ValidationError(self.message)

1 Ответ

2 голосов
/ 30 апреля 2019

Значение расширенного текстового поля не обязательно является полным действительным документом XML, поскольку оно может содержать несколько элементов верхнего уровня, что недопустимо в XML.Если вы хотите запустить значение через синтаксический анализатор XML, который обеспечивает это, вам нужно обернуть его во внешний элемент, такой как <rich-text>...</rich-text> first.

...