Sorl-thumbnail: Bereitstellung statischer Dateien

Erstellt am 20. Sept. 2011  ·  3Kommentare  ·  Quelle: jazzband/sorl-thumbnail

Ich kann keine Möglichkeit finden, eine statische Datei (in STATIC_ROOT) als Miniaturansicht anzuzeigen. Es scheint nur mit externen (http://....) und Mediendateien (in MEDIA_ROOT) zu funktionieren.

Dies ist sehr hilfreich, wenn die Ausgabegröße eines statischen Bildes nicht immer gleich ist (sei es durch Benutzereinstellungen, Themen usw.).

Hilfreichster Kommentar

Hier ist ein Beispiel für einen Patch https://github.com/marcinn/sorl-thumbnail/commit/61557b41169f0656063c557735ef62908a5fcaab

BEARBEITEN : Entschuldigung, es scheint, dass die Ausgabe von thumbnail.url gültig ist, aber wenn sie von cached.url abgerufen wird, wird ihr /media/ anstelle von /static/ vorangestellt. Da ist noch mehr kaputt.

BEARBEITEN (2) : Beim Deserialisieren von Speichercode gibt es ein Designproblem - die Speicherklasse wird mit Standardwerten geladen und instanziiert, anstatt eine vorhandene Instanz zu verwenden. Mit anderen Worten - sorl.thumbnail verwendet die Speicherinstanz nicht wieder, sondern erstellt eine eigene (anders konfiguriert). Als Problemumgehung können wir von FileSystemStorage erben und einen benutzerdefinierten Initialisierer definieren.

Nach der Anwendung kann jeder ganz einfach Thumbnails für alles erstellen.
Es ist möglich, ein benutzerdefiniertes Vorlagen-Tag wie dieses zu erstellen:

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)

Bitte beachten Sie, dass die Einstellungen nicht geändert werden müssen.

Alle 3 Kommentare

Sie müssen einen Speicher verwenden, der STATIC_ROOT verwendet, zum Beispiel können Sie 'django.core.files.storage.FileSystemStorage' verwenden und mit location=settings.STATIC_ROOT und base_url=settings.STATIC_URL instanziieren, bitte fahren Sie mit stackoverflow fort, da dies kein ist Insekt.

Nach fünf Jahren gibt es wegen https://github.com/mariocesar/sorl-thumbnail/blob/master/sorl/thumbnail/base.py#L100 immer noch keine Möglichkeit, Thumbs aus statischen Dateien zu generieren, ohne den DEFAULT-Speicher zu ändern
StackOverflow wird aufgrund der Implementierung nicht helfen.

Irgendwelche Möglichkeiten das zu FIXEN? Es reicht aus, eine benutzerdefinierte Speicherinstanz über get_thumbnail() zu übergeben.

Hier ist ein Beispiel für einen Patch https://github.com/marcinn/sorl-thumbnail/commit/61557b41169f0656063c557735ef62908a5fcaab

BEARBEITEN : Entschuldigung, es scheint, dass die Ausgabe von thumbnail.url gültig ist, aber wenn sie von cached.url abgerufen wird, wird ihr /media/ anstelle von /static/ vorangestellt. Da ist noch mehr kaputt.

BEARBEITEN (2) : Beim Deserialisieren von Speichercode gibt es ein Designproblem - die Speicherklasse wird mit Standardwerten geladen und instanziiert, anstatt eine vorhandene Instanz zu verwenden. Mit anderen Worten - sorl.thumbnail verwendet die Speicherinstanz nicht wieder, sondern erstellt eine eigene (anders konfiguriert). Als Problemumgehung können wir von FileSystemStorage erben und einen benutzerdefinierten Initialisierer definieren.

Nach der Anwendung kann jeder ganz einfach Thumbnails für alles erstellen.
Es ist möglich, ein benutzerdefiniertes Vorlagen-Tag wie dieses zu erstellen:

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)

Bitte beachten Sie, dass die Einstellungen nicht geändert werden müssen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen