2012-07-30 13 views
91

Używam reportlab pdfgen do utworzenia pliku 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?Django uzyskać adres URL plików statycznych w widoku

Jak uzyskać adres URL:

prefix = 'https://' if request.is_secure() else 'http://' 
image_url = prefix + request.get_host() + STATIC_URL + "images/logo_80.png" 

Odpowiedz

206

Ponieważ jest to top wynik w Google, myślałem, że dodać inny sposób to zrobić. Osobiście wolę ten, ponieważ pozostawia implementację do frameworka Django. Odpowiedź

# Original answer said: 
# from django.templatetags.static import static 
# Improved answer (thanks @Kenial, see below) 
from django.contrib.staticfiles.templatetags.staticfiles import static 

url = static('x.jpg') 
# url now contains '/static/x.jpg', assuming a static path of '/static/' 
+6

To jest o wiele lepsza odpowiedź. – CodingWithoutComments

+2

Czy wiesz, czy istnieje czysty sposób dodawania nazwy hosta do statycznego adresu URL (jeśli nie jest obecny w STATIC_URL)? Potrzebuję dodać obrazy lub inne zasoby do wiadomości e-mail, w których użytkownik nie będzie w stanie znaleźć zasobów z odpowiednimi adresami URL. – gepatino

+3

To nie działa dla mnie podczas uruchamiania w debugowaniu (jeszcze nie próbowałem z DEBUG = False). Po prostu otrzymuję ścieżkę przekazaną do zwróconej statycznej metody. Korzystanie z Django 1.6. jakieś pomysły? – Shawn

66

dyve jest dobry, jednak jeśli używasz „pamięci podręcznej” na przechowywanie projektu Django i końcowych ścieżki URL plików statycznych powinien dostać „zakodowaną” (takich jak 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ć zakotwiczony URL.

Dodatkowo, w przypadku korzystania z serwera programistycznego, ta metoda tagu szablonu zwraca nieszyfrowany adres URL, dzięki czemu można używać tego kodu niezależnie od tego, jakim hostem jest on programowany lub produkowany! :)

+1

Dzięki za to ... zabrało mi trochę czasu, aby dowiedzieć się, dlaczego nie dostaję moje hashe md5 zastrzyki – ilovett

+0

@ilovett moja przyjemność! :) – Kenial

+0

Dziękuję za poprawę mojej odpowiedzi! – dyve

6

Oto inny sposób! (testowane na Django 1.6)

from django.contrib.staticfiles.storage import staticfiles_storage 
staticfiles_storage.url(path)