1

公式ドキュメントからこの質問への回答を見つけようとしましたが、見つけることができたのは次のとおりです。

render() が TemplateSyntaxError やその他の例外を発生させてはなりません。テンプレート フィルターがそうであるように、サイレント モードで失敗するはずです。

しかし、上記は実際には質問に答えていません。おそらく、それは通常のカスタムタグに適用され、私の懸念は単純なタグにあるため、さらに混乱しました。

例(および質問自体)を次に示します。

@register.simple_tag
def foo(formfield):
    if isinstance(formfield, forms.ChoiceField):
      # do something
    else:
      # This function doesn't deal with non-ChoiceField. 
      # Should it raise exception or fail silently?

あなたの答えが例外を発生させることである場合、それはTemplateSyntaxErrorまたは他の例外でしょうか?

4

2 に答える 2

2

その答えは、「アプリに何が適しているかによる」ということだと思います。防御的にコーディングする必要がある場合、またはコーディングしたい場合は、例外を発生させます。価格など、何かが表示されないために例外を発生させる正当なビジネス上の理由がある場合は、例外を発生させるか、少なくとも警告を発生させます。

それ以外の場合は、何もせず、.NET MVC スタック トレースを見ていないことに満足してください:)

于 2011-12-08T22:07:39.157 に答える
1

テンプレート タグは、有効な出力を生成できない場合、常に例外を発生させる必要があります。カスタム例外を発生させることはできますが、それが拡張されていることを確認してTemplateSyntaxErrorください。これにより、例外がテンプレート パーサーによってすぐにキャッチされます。問題をドリルダウンするために必要なすべての入力にアクセスできます。

于 2011-12-09T07:53:38.963 に答える