2011-12-15 17 views
12

Sto utilizzando un tag modello in un modello Django (il tag è thumbnail) e genera un'eccezione che fa fallire il modello con un errore 500. Vorrei evitare che ciò accada, poiché non ho il controllo completo sulle immagini di origine che attivano sporadicamente questa eccezione e, in quei casi, utilizzare un'immagine vuota/segnaposto. Questo è il codice corrente modello:Catching exceptions in django templates

{% thumbnail video.image_url "50x74" crop="center" as im %} 
<img src="{% cdn_images im.url %}" /> 
{% empty %} 
<img src="/media/img/noimage_thumb.png" alt="" /> 
{% endthumbnail %} 

questa è l'eccezione (SIF getta):

TemplateSyntaxError at/

Caught IOError while rendering: cannot identify image file 

ho cercato soluzioni e si avvicinò con silent_variable_failure che è una proprietà che, se definita, rende un'eccezione è tranquilla. Immagino che questo possa indicare la giusta direzione, ma per quanto posso dire qualsiasi soluzione usando questo significherebbe che dovrei modificare il codice del tag template stesso, che è una libreria esterna - preferirei non farlo,

Idealmente mi piacerebbe sostituire la terza riga nel mio codice con qualcosa come {% empty or exception_raised %}.

Esiste qualcosa del genere? Conosci qualche alternativa?

+1

errori di modello Django sembrano fallire in silenzio, è strano che il 'thumbnail' tag non segue questa stessa convenzione. Penso che il normale comportamento del Django fallirebbe silenziosamente. – dm03514

+0

@ dm03514 - sì, è vero. Mi sembra un insetto. Forse dovrei segnalarlo. –

risposta

10

Il modo in cui l'ho sempre gestito è di inserirlo nel livello del modello. Quindi nel tuo modello:

class MyImageModel(model.Model): 
     # model fields go here.. 

     def get_url(self): 
      try: 
       # or whatever causes the exception 
       return self.url 
      except IOError: 
       return None 

E nel modello:

{% thumbnail video.image_url "50x74" crop="center" as im %} 

{% if im.get_url %} 
    <img src="{% cdn_images im.get_url %}" /> 
{% else %} 
    <img src="/media/img/noimage_thumb.png" alt="" /> 
{% endif %} 

{% endthumbnail %} 
+0

È ragionevole, grazie. Probabilmente lo farò e poi riferirò il comportamento del tag 'thumbnail' a monte. –

0

Il tuo modello non dovrebbe sollevare un'eccezione come una normale linea di condotta. Se c'è un errore nel modello, lo correggi. Altrimenti, qualsiasi cosa che potrebbe potenzialmente sollevare un'eccezione dovrebbe essere gestita nel modello o nella vista. Non ci sono tag come quelli che menzioni per un motivo.

+0

Grazie per la risposta. Ma il mio modello non ha avuto un errore per quanto posso dire. Immagino che il tag 'thumbnail' sia solo in difetto qui. –