我在Django模板中使用模板标记(标记为thumbnail
)并且它抛出一个异常,使模板失败并出现500错误。我想阻止这种情况发生,因为我没有完全控制偶尔触发此异常的源图像,并在这些情况下使用空白/占位符图像。这是当前的模板代码:
{% 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这是一个属性,如果已定义,则会使异常变得安静。我想这可能指向正确的方向,但据我所知,任何使用此解决方案都意味着我必须修改模板标签代码本身,这是一个外部库 - 我宁愿不这样做,< / p>
理想情况下,我想用{% empty or exception_raised %}
替换代码中的第三行。
有这样的事吗?你知道其他选择吗?
答案 0 :(得分:11)
我一直处理的方法是将其推送到模型层。所以在你的模型中:
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 %}
答案 1 :(得分:0)
您的模板不应该将异常作为正常的行动方案提出。如果模板中有错误,则修复它。否则,任何可能引发异常的事情都应该在模型或视图中处理。没有像你提到的标签。