Używam reportlab pdfgen do tworzenia plików PDF. W pliku PDF znajduje się obraz utworzony przez drawImage
. W tym celu potrzebuję adresu URL do obrazu lub ścieżki do obrazu w widoku. Udało mi się zbudować adres URL, ale jak uzyskać lokalną ścieżkę do obrazu?
Jak uzyskać adres 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
zgodnie z opisem tutaj: stackoverflow.com/questions/2345708/ ...from django.templatetags.static import static
zamiast tego.odpowiedź dyve jest dobra, jednak jeśli używasz "pamięci podręcznej" w swoim projekcie django i końcowe ścieżki url plików statycznych powinny zostać "zaszyfrowane" (np. style.aaddd9d8d8d7.css z style.css ), wtedy nie można uzyskać dokładnego adresu URL z
django.templatetags.static.static()
. Zamiast tego musisz użyć tagu szablonu z,django.contrib.staticfiles
aby uzyskać zaszyfrowany adres URL.Dodatkowo, w przypadku korzystania z serwera deweloperskiego, ta metoda tagu szablonu zwraca niehaszowany adres URL, więc możesz użyć tego kodu niezależnie od hosta, na którym jest programowany czy produkcyjny! :)
źródło
oto inny sposób! (testowane na Django 1.6)
źródło
staticfiles_storage.url(path, force=True)
Użyj domyślnego
static
tagu:Jest inny tag
django.contrib.staticfiles.templatetags.staticfiles
(jak w zaakceptowanej odpowiedzi), ale jest on przestarzały w Django 2.0+.źródło
Od Django 3.0 powinieneś używać
from django.templatetags.static import static
:źródło
Odpowiedź @ dyve nie działa dla mnie na serwerze deweloperskim. Zamiast tego rozwiązałem to za pomocą
find
. Oto funkcja:źródło
Jeśli chcesz uzyskać bezwzględny adres URL (w tym protokół, host i port), możesz użyć
request.build_absolute_uri
funkcji pokazanej poniżej:źródło