在django模板中捕获异常

Edu*_*nec 14 python django exception django-templates

我在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 %}
Run Code Online (Sandbox Code Playgroud)

这是例外(PIL抛出它):

TemplateSyntaxError at /

Caught IOError while rendering: cannot identify image file
Run Code Online (Sandbox Code Playgroud)

我搜索了解决方案,并提出了silent_variable_failure,这是一个属性,如果定义,则使Exception保持安静.我想这可能指向正确的方向,但据我所知,任何使用此解决方案都意味着我必须修改模板标签代码本身,这是一个外部库 - 我宁愿不这样做,

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

这样的事情存在吗?你知道其他选择吗?

Sam*_*lan 13

我总是处理这个问题的方法就是把它推到模型层.所以在你的模型中:

  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
Run Code Online (Sandbox Code Playgroud)

在您的模板中:

{% 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 %}
Run Code Online (Sandbox Code Playgroud)