静的(STATIC_ROOT内)ファイルのサムネイルを作成する方法が見つかりません。 外部(http:// ....)ファイルとメディア(MEDIA_ROOT内)ファイルでのみ機能するようです。
これは、静止画像の出力サイズが常に同じであるとは限らない場合に非常に役立ちます(ユーザー設定、テーマ設定など)
STATIC_ROOTを使用するストレージを使用する必要があります。たとえば、「django.core.files.storage.FileSystemStorage」を使用して、location = settings.STATIC_ROOTおよびbase_url = settings.STATIC_URLでインスタンス化できます。これは、stackoverflowではないため続行してください。バグ。
https://github.com/mariocesar/sorl-thumbnail/blob/master/sorl/thumbnail/base.py#L100のため、5年経っても、デフォルトのストレージを変更せずに静的ファイルからサムネイルを生成することはできません。
StackOverflowは、実装が原因で役に立ちません。
それを修正するチャンスはありますか? get_thumbnail()
を介してカスタムストレージインスタンスを渡すだけで十分です。
パッチの例を次に示しますhttps://github.com/marcinn/sorl-thumbnail/commit/61557b41169f0656063c557735ef62908a5fcaab
編集:申し訳ありませんが、 thumbnail.url
からの出力は有効なようですが、 cached.url
から取得すると、 /static/
$ではなく/media/
のプレフィックスが付きます。 中にはもっと壊れたものがあります。
編集(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
から取得すると、/static/
$ではなく/media/
のプレフィックスが付きます。 中にはもっと壊れたものがあります。編集(2) :ストレージコードの逆シリアル化には設計上の問題があります-ストレージクラスは、既存のインスタンスを使用する代わりに、デフォルトでロードおよびインスタンス化されます。 言い換えると、sorl.thumbnailはストレージインスタンスを再利用しませんが、独自のインスタンスを作成します(構成が異なります)。 回避策として、FileSystemStorageから継承し、カスタム初期化子を定義できます。
適用後、誰でも簡単に何でもサムネイルを生成できます。
次のようなカスタムテンプレートタグを作成することができます。
設定を変更する必要はありませんのでご注意ください。