6

ho fatto questo filtro personalizzato per verificare se l'immagine esiste o no:Django - filtro personalizzato per verificare se il file esiste

from django import template 
from django.core.files.storage import default_storage 

register = template.Library() 

@register.filter(name='file_exists') 
def file_exists(filepath): 
    if default_storage.exists(filepath): 
     return filepath 
    else: 
     index = filepath.rfind('/') 
     new_filepath = filepath[:index] + '/image.png' 
     return new_filepath 

e ho usato questo nel modello come questo:

<img src="{{ STATIC_URL }}images/{{ book.imageurl }}|file_exists" alt="{{book.title}} Cover Photo"> 

Ma non funziona. E non ho idea del perché.

+0

Cosa vuoi dire che "non funziona"? Cosa restituisce? –

+0

Ottengo 'http: // localhost: 8000/static/images/ios.png | file_exists' nell'url dell'immagine – Sourabh

risposta

5

Non si sta applicando il filtro perché |file_exists è esterno a {{}}. Prova questo:

<img src="{{ STATIC_URL }}images/{{ book.imageurl|file_exists }}" alt="{{book.title}} Cover Photo"> 

Oppure, se si desidera applicare file_exists a tutta l'URL dell'immagine, provate questo:

<img src="{{ STATIC_URL|add:'images/'|add:book.imageurl|file_exists }}" alt="{{book.title}} Cover Photo"> 
+0

Voglio che il filtro ottenga' {{STATIC_URL}} images/{{book.imageurl}} '. e non solo '{{book.imageurl}}'. È possibile? – Sourabh

+0

@Sourabh Ho aggiornato la risposta, per favore controlla. – alecxe

+0

Ho provato il tuo primo metodo e ho cambiato il filtro in '.exists ('appname/static/images /' + DataIReceived)' e '.exists ('static/images /' + DataIReceived)' ma in entrambi i casi il django non riesce a trovare file e ottengo 'image.png' indietro. Quale dovrebbe essere il percorso relativo? – Sourabh