Glavna težava je, da privzeto slikovno polje Django ne podpira svg. Za shranjevanje svgs morate uporabiti razred polja po meri.
? 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>
To je ImageField po meri, ki vam omogoča nalaganje slike ali SVG.
Metoda to_python vzame podatke iz obrazca in jih pretvori v FileObject.
Če so podatki že FileObject, jih samo vrne.
Če ima podatek atribut branja (tj. če je predmet, podoben datoteki), ga vrne.
Če so podatki prazni (”), vrne ” (to je zato, ker prazna polja za nalaganje datotek vrnejo None namesto ”, kot druga polja).
Če podatki niso prazni, jih poskuša odpreti kot datoteko (z uporabo načina 'rb'). Če to uspe, vrne predmet datoteke. Če ne, samo vrne podatke (to je zato, da se obrazci, ki morda pričakujejo te podatke pozneje, ne pokvarijo).
Dovolite nalaganje datotek SVG v ImageField prek skrbnika Django
Če želite dovoliti nalaganje datotek SVG v ImageField v Djangu, lahko to storite tako, da v datoteko settings.py dodate naslednjo vrstico:
IMAGE_FIELD_MAX_FILE_SIZE = 1000000
Kako shraniti Svgs v slikovno polje Django
Obstaja nekaj različnih načinov za shranjevanje svg v Django. Najenostavnejši način je uporaba razreda ImageField. Ta razred vam omogoča, da podate URL ali pot do datoteke kot vrednost za polje.
Drug način za shranjevanje svgs v Django je uporaba razreda ImageGallery. Ta razred vam omogoča, da določite URL ali pot do datoteke kot vrednost za polje in samodejno ustvari galerijo slik na podlagi te poti.