Riješeno: kako pohraniti svgs u django polje slike sa SVGAndImageFormField

Glavni problem je što svgovi nisu podržani od strane zadanog Django polja slike. Morate koristiti prilagođenu klasu polja za pohranjivanje 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>

Ovo je prilagođeno ImageField koje vam omogućuje učitavanje slike ili SVG-a.
Metoda to_python uzima podatke iz obrasca i pretvara ih u FileObject.
Ako je podatak već FileObject, samo ga vraća.
Ako podaci imaju atribut čitanja (tj. ako je to objekt nalik datoteci), vraća ga.
Ako su podaci prazni (”), vraćaju ” (to je zato što prazna polja za učitavanje datoteka vraćaju Ništa umjesto ”, kao druga polja).
Ako podaci nisu prazni, pokušava ih otvoriti kao datoteku (koristeći način 'rb'). Ako ovo uspije, vraća se objekt datoteke. Ako nije, samo vraća same podatke (ovo je tako da se obrasci koji možda očekuju te podatke kasnije ne pokvare).

Dopusti učitavanje SVG datoteka u ImageField putem Django administratora

Ako želite dopustiti učitavanje SVG datoteka u ImageField u Djangu, to možete učiniti dodavanjem sljedećeg retka vašoj datoteci settings.py:

IMAGE_FIELD_MAX_FILE_SIZE = 1000000

Kako pohraniti Svgs u Django Image Field

Postoji nekoliko različitih načina za pohranjivanje svgova u Django. Najjednostavniji način je korištenje klase ImageField. Ova vam klasa omogućuje navođenje URL-a ili putanje datoteke kao vrijednosti za polje.

Drugi način pohranjivanja svgs-ova u Django je korištenje klase ImageGallery. Ova klasa vam omogućuje da navedete URL ili filepath kao vrijednost za polje, a automatski će generirati galeriju slika na temelju te staze.

Povezani postovi:

Ostavite komentar