2011-12-15 75 views
12

我在Django模板中使用模板标记(标记为thumbnail),它抛出了一个异常,导致模板失败并出现500错误。我想阻止这种情况的发生,因为我没有完全控制零星触发此异常的源图像,并且在这些情况下使用空白/占位符图像。这是当前模板的代码:在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 %} 

这是例外(PIL把它扔了):

TemplateSyntaxError at/

Caught IOError while rendering: cannot identify image file 

我搜索的解决方案,并提出了silent_variable_failure这是一个属性,如果定义,使得一个例外是安静的。我想这可能指向正确的方向,但据我所知,任何解决方案使用这将意味着我将不得不修改模板标记代码本身,这是一个外部库 - 我不希望这样做,

理想情况下,我想用我的代码中的第三行替换{% empty or exception_raised %}

这样的事情是否存在?你知道任何替代品吗?

+1

Django的模板错误似乎静默失败,这是奇怪的是`thumbnail`标签不遵循同样的约定。我认为正常的Django行为将会失败。 – dm03514 2011-12-15 17:24:29

+0

@ dm03514 - 是的,那是真的。这对我来说就像是一个bug。也许我应该报告它。 – 2011-12-15 17:38:22

回答

10

我一直处理这个问题的方法是将它推到模型层。因此,在你的模型:

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 

而且在你的模板:

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

您的模板不应该引发异常,因为它是正常的操作过程。如果模板中有错误,请修复它。否则,应该在模型或视图中处理任何可能引发异常的东西。没有标签像你提到的原因。

+0

感谢您的回答。但据我所知,我的模板没有出现错误。我猜`thumbnail`标签在这里是错误的。 – 2011-12-15 17:39:41