Загружать контент OpenXML в Django admin, сохраняя стили TextField

Я пытаюсь использовать интерфейс администратора Django 1.8 + RedactorJS (через https://pypi.python.org/pypi/django-wysiwyg-redactor/), чтобы загрузить файл doc в поле модели Django, включенное с помощью плагина RedactorEditor. Другими словами: разрешите пользователю загружать и изменять простой файл DOC, используя текстовую область от администратора Django.

До сих пор я был в состоянии прочитать документ (используя oodocx), преобразовать его в строку OpenXML, используя lxml, и сохранить эту строку в поле модели типа Text.

Кроме того, я могу использовать виджет RedactorEditor для загрузки этого поля и использовать панель инструментов в стиле TinyMCE, чтобы изменять содержимое загруженного файла DOC.

Проблема в том, что я теряю все стили. И как картинка стоит тысячи слов, вот оно

Мой оригинальный файл слова

введите описание изображения здесь

Как выглядит поле в поле администратора Django

введите описание изображения здесь

И это содержимое текстового поля в виде строки Unicode OpenXML:

u'<w:body xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml"><w:p><w:pPr><w:pStyle w:val="Normal"/><w:jc w:val="center"/><w:rPr/></w:pPr><w:r><w:rPr/><w:t>Text text text text text text text</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="Normal"/><w:rPr/></w:pPr><w:r><w:rPr/></w:r></w:p><w:p><w:pPr><w:pStyle w:val="Normal"/><w:rPr><w:b/><w:b/><w:bCs/><w:color w:val="800000"/></w:rPr></w:pPr><w:r><w:rPr><w:b/><w:bCs/><w:color w:val="800000"/></w:rPr><w:t>RED TEXT RED TEXT RED TEXT RED TEXT</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="Normal"/><w:rPr/></w:pPr><w:r><w:rPr/></w:r></w:p><w:p><w:pPr><w:pStyle w:val="Normal"/><w:rPr/></w:pPr><w:r><w:rPr/></w:r></w:p><w:p><w:pPr><w:pStyle w:val="Normal"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="1"/></w:numPr><w:rPr/></w:pPr><w:r><w:rPr/><w:t>POINT 1</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="Normal"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="1"/></w:numPr><w:rPr/></w:pPr><w:r><w:rPr/><w:t>POINT 2</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="Normal"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="1"/></w:numPr><w:rPr/></w:pPr><w:r><w:rPr/><w:t>POINT 3</w:t></w:r></w:p><w:sectPr><w:type w:val="nextPage"/><w:pgSz w:w="11906" w:h="16838"/><w:pgMar w:left="1134" w:right="1134" w:header="0" w:top="1134" w:footer="0" w:bottom="1134" w:gutter="0"/><w:pgNumType w:fmt="decimal"/><w:formProt w:val="false"/><w:textDirection w:val="lrTb"/></w:sectPr></w:body>'

Итак, как я могу сделать виджет Django redactorjs, чтобы понять формат OpenXML и применить стили? Должен ли я использовать другой редактор Javascript? Попробуйте написать свой собственный плагин redactorJS? Может быть, другой подход?

1 ответ

Решено: преобразовал содержимое OpenXML файла DOC в HTML с помощью python-docx. После этого просто загрузите HTML в редакторе redactorjs

Другие вопросы по тегам