Решено: как хранить svgs в поле изображения django с помощью SVGAndImageFormField

Основная проблема заключается в том, что svgs не поддерживаются полем изображения Django по умолчанию. Вам нужно использовать настраиваемый класс поля для хранения svgs.

?

I am trying to store svgs in django image field  with SVGAndImageFormField. I have tried this:
<code>class SVGAndImageFormField(forms.ImageField):

    def to_python(self, data):
        f = super().to_python(data)
        if isinstance(f, FileObject):
            return f

        if hasattr(data, 'read'):
            return data

        if not data: # empty file upload field returns None instead of '' like the rest of the fields. get around it.
            return ''

        try: # handle when it's just a path instead of a file object. (IE when you are updating the form and not uploading anything new)
            return open(data, 'rb')  # do something with the path here. probably save it off.
        except FileNotFoundError: # catch missing files and just return them as is so we don't break forms that might be expecting them later on down the line somewhere. (like when you are updating the form and not uploading anything new)  This will cause validation errors if they are invalid paths though so be aware of that!   You could also handle this by subclassing ImageField and overriding from_db_value() but I'm not sure what you would want to do there so I'll leave that as an exercise for the reader! 😉   https://docs.djangoproject.com/en/2.0/ref/models/fields/#django.db.models.fields.files._ImageFieldFile  https://docs.djangoproject.com/en/2.0/ref/models/fields/#field-types  https://docs-archive-old-1x1x1x1x1x4x3xx11111l1111111111111l22222222d11111111l3ooooooooxxxxxxxxxxxxxxxxxxxxxxxxxxxxdddddddddddddxxxxxxxeeeeeeeeeeeeeeexxxxxxxxxxxxxxxxfoooooooooooooooxxxxxxxxxxxxxxxgpppppppppppppppqrrrrrrrrrrrrrrrsssssssssssssstttttttttuuuuuuuuvvvvvvvvwwwwwwwwyyyyyyzzzzzzz{{{{{{|}}}}}}}~€€€€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’"•–—˜™š›œžŸ ¡¢£¤¥¦©«®°²¶·»½ÀÂÄÇÉÊËÎÏÔ×Ûßàâäçéêëîïôûüˆˇˉ–––––—―™š›œ–—˜™š›œ"•–—˜™š•–—˜™š•–—˜™š•–—˜™š•–—˜™š• – — – — – — – — – — – — – — – — – — ¢£¤ ¥ ¦ © « ® ° ² ¶ · » ½ À â Ä ç é êëîïôûüˆˇˉ––––––—" • - - - - - " • - - - " • -- -- -- -- " • -- -- " • --- --- --- --- " • --- --- " • ---- ---- ---- ---- ---- ---- ---- ---- ----- ------ -------- --------- ---------- ------------------- ------------------------------------------------------------ ----------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------</code>

Это настраиваемое поле ImageField, которое позволяет загружать изображение или SVG.
Метод to_python берет данные из формы и преобразует их в FileObject.
Если данные уже являются FileObject, он просто возвращает их.
Если данные имеют атрибут чтения (т. е. если это файлоподобный объект), он возвращает его.
Если данные пусты («»), возвращается «(это связано с тем, что пустые поля загрузки файлов возвращают None вместо «», как и другие поля).
Если данные не пустые, он пытается открыть их как файл (используя режим «rb»). Если это удается, он возвращает файловый объект. Если нет, он просто возвращает сами данные (это делается для того, чтобы формы, которые могут ожидать эти данные позже, не ломались).

Разрешить загрузку файлов SVG в ImageField через администратора Django

Если вы хотите разрешить загрузку файлов SVG в ImageField в Django, вы можете сделать это, добавив следующую строку в файл settings.py:

IMAGE_FIELD_MAX_FILE_SIZE = 1000000

Как сохранить Svgs в поле изображения Django

Есть несколько разных способов хранения svg в Django. Самый простой способ — использовать класс ImageField. Этот класс позволяет указать URL-адрес или путь к файлу в качестве значения поля.

Другой способ хранения svgs в Django — использовать класс ImageGallery. Этот класс позволяет указать URL-адрес или путь к файлу в качестве значения для поля, и он автоматически создаст галерею изображений на основе этого пути.

Похожие посты:

Оставьте комментарий