2011-12-15 19 views
12

Estoy usando una etiqueta de plantilla en una plantilla de Django (la etiqueta es thumbnail) y arroja una excepción que hace que la plantilla falle con un error de 500. Me gustaría evitar que esto ocurra, ya que no tengo control total sobre las imágenes de origen que ocasionalmente desencadenan esta excepción, y en cambio utilizo una imagen en blanco/marcador de posición en esos casos. Este es el código actual plantilla:Captura de excepciones en plantillas de django

{% 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 %} 

Esta es la excepción (PIL lo tira):

TemplateSyntaxError at/

Caught IOError while rendering: cannot identify image file 

he buscado soluciones y se acercó con silent_variable_failure que es una propiedad que, si está definido, hace una Excepción sea silenciosa. Creo que esto puede apuntar en la dirección correcta, pero hasta donde puedo decir que cualquier solución usando esto significaría que tendría que modificar el código de la etiqueta de la plantilla en sí, que es una biblioteca externa. Preferiría no hacerlo,

Idealmente me gustaría reemplazar la tercera línea en mi código con algo como {% empty or exception_raised %}.

¿Existe algo así? ¿Conoces alguna alternativa?

+1

errores de plantillas de Django parecen fallar en silencio, es extraño que el 'thumbnail' etiqueta no sigue esta misma convención. Creo que el comportamiento normal de django estaría fallando silenciosamente. – dm03514

+0

@ dm03514 - sí, eso es cierto. Se siente como un error para mí. Quizás debería informarlo. –

Respuesta

10

La forma en que siempre he manejado esto es subirlo a la capa de modelo. Así que en su modelo:

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 

Y en su plantilla:

{% 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

Eso es razonable, gracias. Probablemente haga esto y luego informe el comportamiento de la etiqueta 'thumbnail' en sentido ascendente. –

0

Su plantilla no debería generar una excepción como un curso de acción normal. Si hay un error en la plantilla, lo arregla. De lo contrario, cualquier cosa que potencialmente pueda generar una excepción debe manejarse en el modelo o la vista. No hay ninguna etiqueta como usted menciona por una razón.

+0

Gracias por su respuesta. Pero mi plantilla no tiene un error por lo que puedo decir. Supongo que la etiqueta 'thumbnail' es la culpable aquí. –

Cuestiones relacionadas