Megoldva: hogyan lehet svg-ket tárolni a django képmezőben az SVGAndImageFormField segítségével

A fő probléma az, hogy az svg-ket nem támogatja az alapértelmezett Django képmező. Az svgs tárolásához egyéni mezőosztályt kell használnia.

?

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>

Ez egy egyéni ImageField, amely lehetővé teszi kép vagy SVG feltöltését.
A to_python metódus kiveszi az adatokat az űrlapból, és FileObjectmé konvertálja.
Ha az adat már FileObject, akkor csak visszaadja.
Ha az adatoknak van read attribútuma (vagyis ha fájlszerű objektumról van szó), akkor azt visszaadja.
Ha az adat üres (”), akkor a "" értéket adja vissza (ez azért van, mert az üres fájlfeltöltési mezők a None értéket adják vissza a " " helyett, mint más mezők).
Ha az adatok nem üresek, akkor megpróbálja fájlként megnyitni (az „rb” móddal). Ha ez sikerül, akkor visszaadja a fájlobjektumot. Ha nem, akkor csak magát az adatot adja vissza (ez azért van így, hogy azok az űrlapok, amelyek később várják ezeket az adatokat, ne törjenek meg).

Engedélyezze az SVG-fájlok feltöltését az ImageFieldbe a Django admin segítségével

Ha engedélyezni szeretné SVG-fájlok feltöltését a Django egyik ImageField-be, ezt úgy teheti meg, hogy hozzáadja a következő sort a settings.py fájlhoz:

IMAGE_FIELD_MAX_FILE_SIZE = 1000000

Hogyan tároljunk Svg-eket a Django képmezőben

A Django-ban többféleképpen is tárolható az svg. A legegyszerűbb módja az ImageField osztály használata. Ez az osztály lehetővé teszi egy URL vagy fájl elérési út megadását a mező értékeként.

Az svg-ek Django-ban való tárolásának másik módja az ImageGallery osztály használata. Ez az osztály lehetővé teszi, hogy egy URL-t vagy egy fájl elérési utat adjon meg a mező értékeként, és automatikusan létrehoz egy képgalériát az elérési út alapján.

Kapcsolódó hozzászólások:

Írj hozzászólást