Je ne trouve aucun moyen de vignetter un fichier statique (dans STATIC_ROOT). Il ne semble fonctionner que sur les fichiers externes (http://....) et multimédias (dans MEDIA_ROOT).
Ceci est très utile lorsque la taille de sortie d'une image statique n'est pas toujours la même (que ce soit par les préférences de l'utilisateur, le thème, etc.)
Vous devez utiliser un stockage qui utilise STATIC_ROOT, par exemple, vous pouvez utiliser 'django.core.files.storage.FileSystemStorage' et instancier avec location=settings.STATIC_ROOT et base_url=settings.STATIC_URL, veuillez continuer sur stackoverflow car ce n'est pas un punaise.
Après cinq ans, il n'y a toujours aucune possibilité de générer des vignettes à partir de fichiers statiques sans modifier le stockage DEFAULT, à cause de https://github.com/mariocesar/sorl-thumbnail/blob/master/sorl/thumbnail/base.py#L100
StackOverflow n'aidera pas en raison de la mise en œuvre.
Des chances de réparer ça ? Passer une instance de stockage personnalisée via get_thumbnail()
suffira.
Voici un exemple de patch https://github.com/marcinn/sorl-thumbnail/commit/61557b41169f0656063c557735ef62908a5fcaab
EDIT : désolé, il semble que la sortie de thumbnail.url
soit valide, mais lorsqu'elle est récupérée à partir de cached.url
, elle est préfixée par /media/
au lieu de /static/
. Il y a quelque chose de plus cassé à l'intérieur.
EDIT (2) : il y a un problème de conception dans la désérialisation du code de stockage - la classe de stockage est chargée et instanciée avec les valeurs par défaut au lieu d'utiliser l'instance existante. En d'autres termes - sorl.thumbnail ne réutilise pas l'instance de stockage mais crée sa propre instance (configurée différemment). Comme solution de contournement, nous pouvons hériter de FileSystemStorage et définir un initialiseur personnalisé.
Après l'avoir appliqué, n'importe qui peut facilement générer des vignettes pour n'importe quoi.
Il est possible de créer une balise de modèle personnalisée comme celle-ci :
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)
Veuillez noter qu'il n'est pas nécessaire de modifier les paramètres.
Commentaire le plus utile
Voici un exemple de patch https://github.com/marcinn/sorl-thumbnail/commit/61557b41169f0656063c557735ef62908a5fcaab
EDIT : désolé, il semble que la sortie de
thumbnail.url
soit valide, mais lorsqu'elle est récupérée à partir decached.url
, elle est préfixée par/media/
au lieu de/static/
. Il y a quelque chose de plus cassé à l'intérieur.EDIT (2) : il y a un problème de conception dans la désérialisation du code de stockage - la classe de stockage est chargée et instanciée avec les valeurs par défaut au lieu d'utiliser l'instance existante. En d'autres termes - sorl.thumbnail ne réutilise pas l'instance de stockage mais crée sa propre instance (configurée différemment). Comme solution de contournement, nous pouvons hériter de FileSystemStorage et définir un initialiseur personnalisé.
Après l'avoir appliqué, n'importe qui peut facilement générer des vignettes pour n'importe quoi.
Il est possible de créer une balise de modèle personnalisée comme celle-ci :
Veuillez noter qu'il n'est pas nécessaire de modifier les paramètres.