Sorl-thumbnail: Melayani File Statis

Dibuat pada 20 Sep 2011  ·  3Komentar  ·  Sumber: jazzband/sorl-thumbnail

Saya tidak dapat menemukan cara untuk membuat thumbnail file statis (dalam STATIC_ROOT). Tampaknya hanya berfungsi pada file eksternal (http://....) dan media (dalam MEDIA_ROOT).

Ini sangat membantu ketika ukuran keluaran gambar statis tidak selalu sama (baik melalui preferensi pengguna, tema, dll)

Komentar yang paling membantu

Berikut adalah contoh tambalan https://github.com/marcinn/sorl-thumbnail/commit/61557b41169f0656063c557735ef62908a5fcaab

EDIT : maaf, sepertinya output dari thumbnail.url valid, tetapi ketika diambil dari cached.url diawali dengan /media/ alih-alih /static/ . Ada sesuatu yang lebih rusak di dalam.

EDIT (2) : ada masalah desain dalam deserializing kode penyimpanan - kelas penyimpanan dimuat dan dipakai dengan default alih-alih menggunakan instance yang ada. Dengan kata lain - sorl.thumbnail tidak menggunakan kembali contoh penyimpanan tetapi membuat sendiri (dikonfigurasi secara berbeda). Sebagai solusinya, kami dapat mewarisi dari FileSystemStorage dan menentukan penginisialisasi khusus.

Setelah menerapkannya, siapa pun dapat dengan mudah membuat thumbnail untuk apa pun.
Dimungkinkan untuk membuat tag templat khusus seperti ini:

from django.core.files.storage import FileSystemStorage
from django.conf import settings
from django import template
from sorl.thumbnail.templatetags.thumbnail import ThumbnailNode


register = template.Library()

class StaticThumbnailStorage(FileSystemStorage):
    def __init__(self, *args, **kw):
        super(StaticThumbnailStorage, self).__init__(
            *args, location='/path/to/custom/static/'
            base_url=settings.STATIC_URL, **kw)

storage = StaticThumbnaikStorage()

class StaticThumbnailNode(ThumbnailNode):
    def _get_thumbnail(self, file_, geometry, **options):
        options['storage'] = storage
        return super(StaticThumbnailNode, self)._get_thumbnail(
                file_, geometry, **options)


@register.tag
def static_thumbnail(parser, token):
    return StaticThumbnailNode(parser, token)

Harap dicatat bahwa pengaturan tidak perlu diubah.

Semua 3 komentar

Anda perlu menggunakan beberapa penyimpanan yang menggunakan STATIC_ROOT, misalnya Anda dapat menggunakan 'django.core.files.storage.FileSystemStorage' dan membuat instance dengan location=settings.STATIC_ROOT dan base_url=settings.STATIC_URL, silakan lanjutkan di stackoverflow karena ini bukan a serangga.

Setelah lima tahun masih tidak ada kemungkinan untuk menghasilkan jempol dari file statis tanpa mengubah penyimpanan DEFAULT, karena https://github.com/mariocesar/sorl-thumbnail/blob/master/sorl/thumbnail/base.py#L100
StackOverflow tidak akan membantu karena implementasi.

Adakah peluang untuk MEMPERBAIKI itu? Melewati instance penyimpanan khusus melalui get_thumbnail() sudah cukup.

Berikut adalah contoh tambalan https://github.com/marcinn/sorl-thumbnail/commit/61557b41169f0656063c557735ef62908a5fcaab

EDIT : maaf, sepertinya output dari thumbnail.url valid, tetapi ketika diambil dari cached.url diawali dengan /media/ alih-alih /static/ . Ada sesuatu yang lebih rusak di dalam.

EDIT (2) : ada masalah desain dalam deserializing kode penyimpanan - kelas penyimpanan dimuat dan dipakai dengan default alih-alih menggunakan instance yang ada. Dengan kata lain - sorl.thumbnail tidak menggunakan kembali contoh penyimpanan tetapi membuat sendiri (dikonfigurasi secara berbeda). Sebagai solusinya, kami dapat mewarisi dari FileSystemStorage dan menentukan penginisialisasi khusus.

Setelah menerapkannya, siapa pun dapat dengan mudah membuat thumbnail untuk apa pun.
Dimungkinkan untuk membuat tag templat khusus seperti ini:

from django.core.files.storage import FileSystemStorage
from django.conf import settings
from django import template
from sorl.thumbnail.templatetags.thumbnail import ThumbnailNode


register = template.Library()

class StaticThumbnailStorage(FileSystemStorage):
    def __init__(self, *args, **kw):
        super(StaticThumbnailStorage, self).__init__(
            *args, location='/path/to/custom/static/'
            base_url=settings.STATIC_URL, **kw)

storage = StaticThumbnaikStorage()

class StaticThumbnailNode(ThumbnailNode):
    def _get_thumbnail(self, file_, geometry, **options):
        options['storage'] = storage
        return super(StaticThumbnailNode, self)._get_thumbnail(
                file_, geometry, **options)


@register.tag
def static_thumbnail(parser, token):
    return StaticThumbnailNode(parser, token)

Harap dicatat bahwa pengaturan tidak perlu diubah.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat