Selesai: cara menyimpan svgs dalam medan imej django dengan SVGAndImageFormField

Masalah utama ialah svgs tidak disokong oleh medan imej Django lalai. Anda perlu menggunakan kelas medan tersuai untuk menyimpan 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>

Ini ialah ImageField tersuai yang membolehkan anda memuat naik sama ada imej atau SVG.
Kaedah to_python mengambil data daripada borang dan menukarnya menjadi FileObject.
Jika data sudah menjadi FileObject, ia hanya mengembalikannya.
Jika data mempunyai atribut baca (iaitu jika ia adalah objek seperti fail), ia mengembalikannya.
Jika data kosong (”), ia kembali ” (ini kerana medan muat naik fail kosong mengembalikan Tiada dan bukannya ”, seperti medan lain).
Jika data tidak kosong, ia cuba membukanya sebagai fail (menggunakan mod 'rb'). Jika ini berjaya, ia mengembalikan objek fail. Jika tidak, ia hanya mengembalikan data itu sendiri (ini supaya borang yang mungkin menjangkakan data ini kemudiannya tidak pecah).

Benarkan fail SVG dimuat naik ke ImageField melalui pentadbir Django

Jika anda ingin membenarkan fail SVG dimuat naik ke ImageField dalam Django, anda boleh berbuat demikian dengan menambahkan baris berikut pada fail settings.py anda:

IMAGE_FIELD_MAX_FILE_SIZE = 1000000

Cara Menyimpan Svg Dalam Medan Imej Django

Terdapat beberapa cara berbeza untuk menyimpan svg dalam Django. Cara paling mudah ialah menggunakan kelas ImageField. Kelas ini membolehkan anda menentukan URL atau laluan fail sebagai nilai untuk medan.

Satu lagi cara untuk menyimpan svgs dalam Django ialah menggunakan kelas ImageGallery. Kelas ini membolehkan anda menentukan URL atau laluan fail sebagai nilai untuk medan dan ia akan menjana galeri imej secara automatik berdasarkan laluan itu.

Related posts:

Tinggalkan komen