Ich möchte Thumbnails dynamisch anhand von Parametern in der URL erstellen. Zum Beispiel würde http://mysite.com/images/1234/120x45.jpg
ein 120x45
thumbnail für die Bild-ID 1234
erstellen.
Die offensichtliche Lösung hierfür ist eine Django-Ansicht, die folgendes bewirkt:
Das sollte "funktionieren", aber ich bin besorgt über die Leistung. Ich mag die Idee nicht, Django zu verwenden, um statischen Inhalt zu dienen. Was sind andere Möglichkeiten, um dieses Problem zu lösen?
Sie müssen Django nicht verwenden, um den statischen Inhalt direkt zu liefern. Lassen Sie Ihren Server 404-Anforderungen für Ihren Bilderordner einfach an eine Django-Ansicht weiterleiten, wo er den Dateinamen aufteilt und die entsprechende Miniaturansicht generiert, bevor er zur ursprünglichen URL zurückgeleitet wird (die hoffentlich kein 404 mehr ist).
Was den Django-Imagekit-Vorschlag der anderen Antwort anbelangt, bin ich nicht sicher, ob Sie dynamisch Image-Thumbs basierend auf URL generieren können, aber ich empfehle es für alle Features es hat.
Bearbeiten:
Was die eigentliche URL-Struktur anbelangt, glaube ich, dass ein typischeres /images/filename-120x45.jpg
es Ihnen ermöglichen würde, 404 Anfragen, die nichts mit dynamischer Thumbnail-Erzeugung zu tun haben, leichter herauszufiltern. Nehmen wir zum Beispiel an, dass es für /images/original_size_image.jpg
Tonnen von 404 Fehlern gibt. Sie möchten nicht, dass diese nach Django geroutet werden, und Sie könnten nur Dateinamen dieses Formats mit Regex abgleichen. [Ende bearbeiten]
Sie müssen jedoch vorsichtig sein, wenn Sie jemanden über diese Funktion informieren, um Ihre Django-App zu spammen. Sie könnten es mit einer unendlichen Anzahl von Bildgrößen- und Dateinamen-Kombinationen an ihren Fingerspitzen töten. Sie müssten überlegen, wie Sie diese Anfragen mit Obergrenzen versehen können, z. B. das Zurückleiten zu einer 404, wenn eine Dimension größer als das Original ist, oder sogar das Ermitteln, wie Anforderungen für mehrere Dimensionen des gleichen Bildes begrenzt werden. Vielleicht warst du das, worauf du hinauskamst, als du "Sperren" erwähnst.
Nebenbei bemerkt, Sie haben Apache getaggt, aber ich würde Ihnen wirklich empfehlen, dass Sie statische Inhalte über so etwas wie Nginx . Sie könnten den zusätzlichen Overhead der dynamischen Image-Anforderungen möglicherweise negieren, wenn Sie einen statischen Dateiserver verwenden, der bei der Bereitstellung statischer Dateien kein kompletter Mist ist.
Sehen Sie sich diese Anwendung an, um Daumen zu generieren.
Entwickelt in Python mit dem tornadoweb Server.
%Vor%Großartige Anwendung
Ich habe diese Antworten nachgeschlagen und obwohl sie funktionieren, waren sie für mich zu einfach. Wenn Sie nur eine schnelle und schmutzige Möglichkeit haben möchten, Thumbnails zu erhalten, ist die Verwendung der PIL-Bibliothek möglicherweise ein guter Aufruf, das ist mein Code:
%Vor%Laden Sie die PIL-Bibliothek hier herunter
Prost, hofft das hilft jemandem.
Sie können einen Blick auf die Sorl-Miniaturansicht werfen. Ich verwende es in fast allen meinen Projekten zusammen mit der Bereitstellung von statischem Inhalt mit Nginx aus dem /media/
dir:)
Ich hatte genau das gleiche Problem: Auf einer Website mit hohem Besucheraufkommen ist es nicht möglich, dutzende Thumbnails zur Reaktionszeit zu erstellen, ebenso wie Thumbnails für alle bisherigen Inhalte im Stapel, also habe ich eine App dafür erstellt. Schau es dir an: Ссылка
Sie müssen das Bild auf der Grundlage der angegebenen Dimension, die Sie benötigen, nur bei Bedarf anpassen. Die Django Imagefit Bibliothek tut genau das, und sie bietet auch die Möglichkeit zu beschneiden.
In Ihrem Beispiel würden Sie {{ 'http://example.com/images/1234.jpg'|resize:'120x45' }}
schreiben und Sie würden mit einem Bild der Größe 120x45 enden.
Tags und Links python django thumbnails