Diselesaikan: cara menyimpan svg di bidang gambar Django dengan SVGAndImageFormField

Masalah utamanya adalah bahwa svg tidak didukung oleh bidang gambar default Django. Anda perlu menggunakan kelas bidang khusus untuk menyimpan svg.

?

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 adalah ImageField khusus yang memungkinkan Anda mengunggah gambar atau SVG.
Metode to_python mengambil data dari formulir dan mengubahnya menjadi FileObject.
Jika datanya sudah menjadi FileObject, itu hanya mengembalikannya.
Jika data memiliki atribut read (yaitu jika itu adalah objek seperti file), itu akan mengembalikannya.
Jika datanya kosong (”), ia mengembalikan ” (ini karena bidang unggahan file kosong mengembalikan Tidak ada alih-alih ”, ​​seperti bidang lainnya).
Jika datanya tidak kosong, ia mencoba membukanya sebagai file (menggunakan mode 'rb'). Jika ini berhasil, ia mengembalikan objek file. Jika tidak, itu hanya mengembalikan data itu sendiri (ini agar formulir yang mungkin mengharapkan data ini nantinya tidak rusak).

Izinkan file SVG diunggah ke ImageField melalui admin Django

Jika Anda ingin mengizinkan file SVG diunggah ke ImageField di Django, Anda dapat melakukannya dengan menambahkan baris berikut ke file settings.py Anda:

IMAGE_FIELD_MAX_FILE_SIZE = 1000000

Cara Menyimpan Svgs Di Bidang Gambar Django

Ada beberapa cara berbeda untuk menyimpan svg di Django. Cara paling sederhana adalah dengan menggunakan kelas ImageField. Kelas ini memungkinkan Anda menentukan URL atau jalur file sebagai nilai untuk bidang.

Cara lain untuk menyimpan svg di Django adalah dengan menggunakan kelas ImageGallery. Kelas ini memungkinkan Anda menentukan URL atau jalur file sebagai nilai untuk bidang, dan secara otomatis akan menghasilkan galeri gambar berdasarkan jalur tersebut.

Pos terkait:

Tinggalkan Komentar