Sorl-thumbnail: خدمة الملفات الثابتة

تم إنشاؤها على ٢٠ سبتمبر ٢٠١١  ·  3تعليقات  ·  مصدر: jazzband/sorl-thumbnail

لا يمكنني العثور على أي طريقة لتصغير ملف ثابت (في STATIC_ROOT). يبدو أنه يعمل فقط على الملفات الخارجية (http: // ....) والوسائط (في MEDIA_ROOT).

يكون هذا مفيدًا جدًا عندما لا يكون حجم إخراج صورة ثابتة هو نفسه دائمًا (سواء كان ذلك من خلال تفضيلات المستخدم ، أو السمات ، وما إلى ذلك)

التعليق الأكثر فائدة

هنا مثال على التصحيح https://github.com/marcinn/sorl-thumbnail/commit/61557b41169f0656063c557735ef62908a5fcaab

تحرير : عذرًا ، يبدو أن الناتج من thumbnail.url صالح ، ولكن عند الاسترداد من cached.url ، يبدأ بـ /media/ بدلاً من /static/ . هناك شيء أكثر انكسارًا بالداخل.

EDIT (2) : هناك مشكلة في التصميم في إلغاء تسلسل كود التخزين - يتم تحميل فئة التخزين وإنشاء مثيل لها باستخدام الإعدادات الافتراضية بدلاً من استخدام مثيل موجود. بمعنى آخر - لا يعيد sorl.thumbnail استخدام مثيل التخزين ولكنه ينشئ مثيلاً خاصًا (تم تكوينه بشكل مختلف). كحل بديل ، يمكننا أن نرث من FileSystemStorage ونحدد مُهيئًا مخصصًا.

بعد تطبيقه ، يمكن لأي شخص إنشاء صور مصغرة لأي شيء بسهولة.
من الممكن إنشاء علامة قالب مخصصة مثل هذه:

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)

يرجى ملاحظة أن الإعدادات لا تحتاج إلى تغيير.

ال 3 كومينتر

تحتاج إلى استخدام بعض مساحة التخزين التي تستخدم STATIC_ROOT ، على سبيل المثال يمكنك استخدام "django.core.files.storage.FileSystemStorage" وإنشاء مثيل لها باستخدام إعدادات الموقع = الإعدادات. خلل برمجي.

بعد خمس سنوات ، لا تزال هناك إمكانية لإنشاء صور مصغرة من الملفات الثابتة دون تغيير التخزين الافتراضي ، بسبب https://github.com/mariocesar/sorl-thumbnail/blob/master/sorl/thumbnail/base.py#L100
لن يساعد StackOverflow بسبب التنفيذ.

أي فرص لإصلاح ذلك؟ سيكون تمرير مثيل التخزين المخصص عبر get_thumbnail() كافيًا.

هنا مثال على التصحيح https://github.com/marcinn/sorl-thumbnail/commit/61557b41169f0656063c557735ef62908a5fcaab

تحرير : عذرًا ، يبدو أن الناتج من thumbnail.url صالح ، ولكن عند الاسترداد من cached.url ، يبدأ بـ /media/ بدلاً من /static/ . هناك شيء أكثر انكسارًا بالداخل.

EDIT (2) : هناك مشكلة في التصميم في إلغاء تسلسل كود التخزين - يتم تحميل فئة التخزين وإنشاء مثيل لها باستخدام الإعدادات الافتراضية بدلاً من استخدام مثيل موجود. بمعنى آخر - لا يعيد sorl.thumbnail استخدام مثيل التخزين ولكنه ينشئ مثيلاً خاصًا (تم تكوينه بشكل مختلف). كحل بديل ، يمكننا أن نرث من FileSystemStorage ونحدد مُهيئًا مخصصًا.

بعد تطبيقه ، يمكن لأي شخص إنشاء صور مصغرة لأي شيء بسهولة.
من الممكن إنشاء علامة قالب مخصصة مثل هذه:

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)

يرجى ملاحظة أن الإعدادات لا تحتاج إلى تغيير.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات