Как импортировать сообщения из WordPress в Wagtail 2 (редактор черновиков), включая изображения?

#python #django #wordpress #wagtail

#python #django #wordpress #wagtail

Вопрос:

Я пытаюсь импортировать сообщения из WordPress в Wagtail, включая изображения.

Я осознаю тот факт, что редактор черновиков сохраняет изображения с выделенным тегом, например:

 <embed alt="fonctionnement-pim-schema-640.png" embedtype="image" format="fullwidth" id="412" />
 

Когда я импортирую свои сообщения из WordPress, я конвертирую теги img в теги для встраивания. Ниже приведен фрагмент моего кода:

 resp = requests.get(img["src"], stream=True)
if resp.status_code != requests.codes.ok:
    print("Unable to import "   img["src"])
    continue
fp = BytesIO()
fp.write(resp.content)
image = Image(title=file_name, width=width, height=height)
image.file.save(file_name, File(fp))
image.save()
try:
    embed_id = image.get_rendition("original").id
    embed_alt = image.get_rendition("original").alt
    new_tag = soup.new_tag('embed', alt=f'{embed_alt}', embedtype="image", format="fullwidth", id=f'{embed_id}')
    img.replace_with(new_tag)
 

Кажется, это работает. Когда я проверяю базу данных, все img теги заменяются правильно отформатированным встроенным тегом, и все изображения загружаются в папку мультимедиа.

К сожалению, когда я проверяю область администратора. Тег embed существует, но изображение не распознается:

Скриншот здесь

Когда я использую общий тег для встраивания в свой сценарий импорта (я имею в виду без использования «форматирования», но один и тот же код для встраивания для всех изображений), импорт работает хорошо (в том числе в Draftail). Может ли «форматировать» или «f string» вводить что-то не так?

Любая помощь будет очень признательна!

Заранее благодарю.

Ответ №1:

Я нашел причину проблемы.

Я использовал изображение для извлечения идентификатора:

 embed_id = image.get_rendition("original").id
 

Но визуализация предназначена для шаблонов. В черновике нам нужно использовать идентификатор объекта изображения, а не идентификатор изображения визуализации:

 embed_id = image.id
 

Для alt текста вам нужно выбрать что-то из вашего исходного содержимого.