J'utilise reportlab pdfgen pour créer un PDF. Dans le PDF, il y a une image créée par drawImage
. Pour cela, j'ai besoin de l'URL d'une image ou du chemin vers une image dans la vue. J'ai réussi à créer l'URL, mais comment puis-je obtenir le chemin local de l'image?
Comment j'obtiens l'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
comme décrit ici: stackoverflow.com/questions/2345708/…from django.templatetags.static import static
plutôt.La réponse de dyve est bonne, cependant, si vous utilisez le "stockage mis en cache" sur votre projet django et que les chemins d'URL finaux des fichiers statiques doivent être "hachés" (comme style.aaddd9d8d8d7.css de style.css ), alors vous impossible d'obtenir une URL précise avec
django.templatetags.static.static()
. Au lieu de cela, vous devez utiliser la balise de modèle dedjango.contrib.staticfiles
pour obtenir l'URL hachée.De plus, en cas d'utilisation d'un serveur de développement, cette méthode de balise de modèle renvoie une URL non hachée, vous pouvez donc utiliser ce code quel que soit l'hôte qu'il s'agit de développement ou de production! :)
la source
voici une autre façon! (testé sur Django 1.6)
la source
staticfiles_storage.url(path, force=True)
Utilisez la
static
balise par défaut :Il existe une autre balise dans
django.contrib.staticfiles.templatetags.staticfiles
(comme dans la réponse acceptée), mais elle est obsolète dans Django 2.0+.la source
Depuis Django 3.0, vous devez utiliser
from django.templatetags.static import static
:la source
La réponse de @ dyve n'a pas fonctionné pour moi dans le serveur de développement. Au lieu de cela, je l'ai résolu avec
find
. Voici la fonction:la source
Si vous souhaitez obtenir une URL absolue (y compris le protocole, l'hôte et le port), vous pouvez utiliser la
request.build_absolute_uri
fonction indiquée ci-dessous:la source