لا يمكنني العثور على أي طريقة لتصغير ملف ثابت (في STATIC_ROOT). يبدو أنه يعمل فقط على الملفات الخارجية (http: // ....) والوسائط (في MEDIA_ROOT).
يكون هذا مفيدًا جدًا عندما لا يكون حجم إخراج صورة ثابتة هو نفسه دائمًا (سواء كان ذلك من خلال تفضيلات المستخدم ، أو السمات ، وما إلى ذلك)
تحتاج إلى استخدام بعض مساحة التخزين التي تستخدم 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)
يرجى ملاحظة أن الإعدادات لا تحتاج إلى تغيير.
التعليق الأكثر فائدة
هنا مثال على التصحيح https://github.com/marcinn/sorl-thumbnail/commit/61557b41169f0656063c557735ef62908a5fcaab
تحرير : عذرًا ، يبدو أن الناتج من
thumbnail.url
صالح ، ولكن عند الاسترداد منcached.url
، يبدأ بـ/media/
بدلاً من/static/
. هناك شيء أكثر انكسارًا بالداخل.EDIT (2) : هناك مشكلة في التصميم في إلغاء تسلسل كود التخزين - يتم تحميل فئة التخزين وإنشاء مثيل لها باستخدام الإعدادات الافتراضية بدلاً من استخدام مثيل موجود. بمعنى آخر - لا يعيد sorl.thumbnail استخدام مثيل التخزين ولكنه ينشئ مثيلاً خاصًا (تم تكوينه بشكل مختلف). كحل بديل ، يمكننا أن نرث من FileSystemStorage ونحدد مُهيئًا مخصصًا.
بعد تطبيقه ، يمكن لأي شخص إنشاء صور مصغرة لأي شيء بسهولة.
من الممكن إنشاء علامة قالب مخصصة مثل هذه:
يرجى ملاحظة أن الإعدادات لا تحتاج إلى تغيير.