Ich verwende reportlab pdfgen, um ein PDF zu erstellen. In der PDF-Datei befindet sich ein Bild, das von erstellt wurde drawImage
. Dazu benötige ich entweder die URL zu einem Bild oder den Pfad zu einem Bild in der Ansicht. Ich habe es geschafft, die URL zu erstellen, aber wie würde ich den lokalen Pfad zum Bild erhalten?
Wie bekomme ich die URL:
prefix = 'https://' if request.is_secure() else 'http://'
image_url = prefix + request.get_host() + STATIC_URL + "images/logo_80.png"
request.build_absolute_uri
wie hier beschrieben weiterleitenfrom django.templatetags.static import static
stattdessen.Die Antwort von dyve ist jedoch gut. Wenn Sie in Ihrem Django-Projekt "zwischengespeicherten Speicher" verwenden und die endgültigen URL-Pfade der statischen Dateien "gehasht" werden sollten (z. B. style.aaddd9d8d8d7.css von style.css ), dann Sie kann keine genaue URL mit bekommen
django.templatetags.static.static()
. Stattdessen müssen Sie das Vorlagen-Tag von verwendendjango.contrib.staticfiles
, um die Hash-URL abzurufen.Darüber hinaus gibt diese Template-Tag-Methode bei Verwendung eines Entwicklungsservers eine nicht gehashte URL zurück, sodass Sie diesen Code unabhängig davon verwenden können, auf welchem Host es sich um Entwicklung oder Produktion handelt! :) :)
quelle
Hier ist ein anderer Weg! (getestet auf Django 1.6)
quelle
staticfiles_storage.url(path, force=True)
Verwenden Sie das Standard-
static
Tag:Es gibt ein anderes Tag in
django.contrib.staticfiles.templatetags.staticfiles
(wie in der akzeptierten Antwort), aber es ist in Django 2.0+ veraltet.quelle
Ab Django 3.0 sollten Sie Folgendes verwenden
from django.templatetags.static import static
:quelle
Die Antwort von @ dyve hat bei mir auf dem Entwicklungsserver nicht funktioniert. Stattdessen habe ich es mit gelöst
find
. Hier ist die Funktion:quelle
Wenn Sie eine absolute URL (einschließlich Protokoll, Host und Port) erhalten möchten, können Sie die folgende
request.build_absolute_uri
Funktion verwenden:quelle