Rezolvat: cum să stocați svg-uri în câmpul de imagine django cu SVGAndImageFormField

Problema principală este că svg-urile nu sunt acceptate de câmpul implicit de imagine Django. Trebuie să utilizați o clasă de câmp personalizat pentru a stoca svg-uri.

?

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>

Acesta este un ImageField personalizat care vă permite să încărcați fie o imagine, fie un SVG.
Metoda to_python preia datele din formular și le convertește într-un FileObject.
Dacă datele sunt deja un FileObject, doar le returnează.
Dacă datele au un atribut de citire (adică dacă este un obiect asemănător unui fișier), îl returnează.
Dacă datele sunt goale (""), se returnează " (acest lucru se datorează faptului că câmpurile goale de încărcare a fișierelor returnează Nimic în loc de "", ca și alte câmpuri).
Dacă datele nu sunt goale, încearcă să le deschidă ca fișier (folosind modul „rb”). Dacă aceasta reușește, returnează obiectul fișier. Dacă nu, returnează doar datele în sine (acest lucru pentru ca formularele care ar putea aștepta aceste date mai târziu să nu se spargă).

Permiteți încărcarea fișierelor SVG în ImageField prin intermediul administratorului Django

Dacă doriți să permiteți încărcarea fișierelor SVG într-un ImageField în Django, puteți face acest lucru adăugând următoarea linie la fișierul settings.py:

IMAGE_FIELD_MAX_FILE_SIZE = 1000000

Cum să stocați SVG-uri în câmpul de imagine Django

Există câteva moduri diferite de a stoca svg-uri în Django. Cea mai simplă modalitate este să utilizați clasa ImageField. Această clasă vă permite să specificați o adresă URL sau o cale de fișier ca valoare pentru câmp.

O altă modalitate de a stoca svg-uri în Django este să utilizați clasa ImageGallery. Această clasă vă permite să specificați o adresă URL sau o cale de fișier ca valoare pentru câmp și va genera automat o galerie de imagini pe baza acelei căi.

Postări asemănatoare:

Lăsați un comentariu