Résolu : comment stocker des svgs dans le champ d'image django avec SVGAndImageFormField

Le principal problème est que les svgs ne sont pas pris en charge par le champ d'image Django par défaut. Vous devez utiliser une classe de champ personnalisée pour stocker les 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>

Il s'agit d'un ImageField personnalisé qui vous permet de télécharger une image ou un SVG.
La méthode to_python prend les données du formulaire et les convertit en un FileObject.
Si les données sont déjà un FileObject, il les renvoie simplement.
Si les données ont un attribut read (c'est-à-dire s'il s'agit d'un objet de type fichier), il le renvoie.
Si les données sont vides (""), elles renvoient " (c'est parce que les champs de téléchargement de fichiers vides renvoient Aucun au lieu de ", comme les autres champs).
Si les données ne sont pas vides, il essaie de les ouvrir en tant que fichier (en utilisant le mode 'rb'). Si cela réussit, il renvoie l'objet fichier. Sinon, il renvoie simplement les données elles-mêmes (c'est pour que les formulaires qui pourraient attendre ces données plus tard ne se cassent pas).

Autoriser le téléchargement de fichiers SVG sur ImageField via l'administrateur Django

Si vous souhaitez autoriser le téléchargement de fichiers SVG dans un ImageField dans Django, vous pouvez le faire en ajoutant la ligne suivante à votre fichier settings.py :

IMAGE_FIELD_MAX_FILE_SIZE = 1000000 XNUMX XNUMX

Comment stocker des SVG dans le champ d'image de Django

Il existe plusieurs façons de stocker des svgs dans Django. Le plus simple est d'utiliser la classe ImageField. Cette classe vous permet de spécifier une URL ou un chemin de fichier comme valeur du champ.

Une autre façon de stocker des svgs dans Django consiste à utiliser la classe ImageGallery. Cette classe vous permet de spécifier une URL ou un chemin de fichier comme valeur du champ, et elle générera automatiquement une galerie d'images basée sur ce chemin.

Articles connexes

Laisser un commentaire