Zgjidhur: si të ruani svgs në fushën e imazhit django me SVGAndImageFormField

Problemi kryesor është se svgs nuk mbështeten nga fusha e paracaktuar e imazhit të Django. Ju duhet të përdorni një klasë të personalizuar të fushës për të ruajtur 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>

Ky është një ImageField i personalizuar që ju lejon të ngarkoni ose një imazh ose një SVG.
Metoda to_python merr të dhënat nga formulari dhe i konverton ato në një FileObject.
Nëse të dhënat janë tashmë një FileObject, ato thjesht e kthejnë atë.
Nëse të dhënat kanë një atribut leximi (dmth. nëse është një objekt i ngjashëm me skedarin), ato e kthejnë atë.
Nëse të dhënat janë bosh (”), ato kthehen ” (kjo për shkak se fushat e ngarkimit të skedarëve bosh kthejnë Asnjë në vend të ”, si fushat e tjera).
Nëse të dhënat nuk janë bosh, ai përpiqet t'i hapë ato si skedar (duke përdorur modalitetin 'rb'). Nëse kjo ka sukses, ai kthen objektin e skedarit. Nëse jo, ai thjesht i kthen vetë të dhënat (kjo është në mënyrë që format që mund t'i presin këto të dhëna më vonë të mos prishen).

Lejo që skedarët SVG të ngarkohen në ImageField nëpërmjet administratorit të Django

Nëse dëshironi të lejoni që skedarët SVG të ngarkohen në një ImageField në Django, mund ta bëni këtë duke shtuar rreshtin e mëposhtëm në skedarin tuaj settings.py:

IMAGE_FIELD_MAX_FILE_SIZE = 1000000

Si të ruani Svgs në fushën e imazhit të Django

Ka disa mënyra të ndryshme për të ruajtur svgs në Django. Mënyra më e thjeshtë është përdorimi i klasës ImageField. Kjo klasë ju lejon të specifikoni një URL ose shteg skedari si vlerë për fushën.

Një mënyrë tjetër për të ruajtur svgs në Django është përdorimi i klasës ImageGallery. Kjo klasë ju lejon të specifikoni një URL ose një shteg skedari si vlerë për fushën dhe do të gjenerojë automatikisht një galeri imazhesh bazuar në atë shteg.

Mesazhe të ngjashme:

Lini një koment