2011-12-15 9 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を思い付いた、なります例外は静かである。私はこれが正しい方向を指していると思うかもしれないが、私がこれを使用して解決策を教えることができる限り、私は外部ライブラリであるテンプレートタグのコード自体を変更する必要があるだろう - 私はそれをしたくないでしょう

理想的には、コード内の3行目を{% empty or exception_raised %}のように置き換えたいと考えています。

そのようなものはありますか?あなたはどんな選択肢も知っていますか?

+1

Djangoテンプレートエラーが黙って失敗しているように見える、それは 'thumbnail'タグは、これと同じ規則に従っていないことを奇妙です。私は通常のジャンゴの動作は黙って失敗すると思います。 – dm03514

+0

@ dm03514 - はい、そうです。それは私のバグのように感じます。多分私はそれを報告すべきです。 –

答えて

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

これは合理的です、ありがとうございます。おそらくこれを行い、上流の 'thumbnail'タグの動作を報告します。 –

0

あなたのテンプレートは、通常の行動の流れとして例外を発生させるべきではありません。テンプレートにエラーがある場合は修正します。それ以外の場合、例外を発生させる可能性があるものは、モデルまたはビューで処理する必要があります。あなたが理由で言及したようなタグはありません。

+0

あなたの答えをありがとう。しかし私のテンプレートは、私が知る限り、エラーはありません。私は 'サムネイル'タグがただここに欠点があると思う。 –