2

Django {% url %} テンプレートタグは、提供された URL を反転できない場合、NoReverseMatch エラーを発生させます。これは開発では役に立ちますが、本番環境では、醜い 500 エラーでユーザーを停止させ、ページ全体をブロックし、サイトが壊れていると思わせてしまいます。

テンプレート開発者は、タイプミスでサイト全体をダウンさせることはできません。私がやりたいのは、この動作を透過的にオーバーライドして、本番環境でのみ、逆一致が見つからない場合に「#」などのデフォルトの URL を出力し、バックグラウンドで例外追跡システムにエラーを報告することです。ですが、500 エラーを発生させることなく、ユーザーが行っていたことを続行できます。

デフォルトの {% url %} タグを自分のより安全なバージョンに透過的に置き換える方法はありますか? サイトのすべてのテンプレートの先頭に {% load my_custom_url_tag %} を追加する必要はありません。ある時点で人々が忘れてしまい、それ以外の場合はタグの動作が同じになるためです。違いは、エラーの処理方法です。

4

2 に答える 2

5

組み込みの url タグをサイレント モードで使用し、ルックアップを試行して、見つかった URL を使用できます (何かが見つかった場合)。

Django ドキュメントから:

ビューが欠落している場合、この{% url ... as var %}構文はエラーを引き起こしません。実際には、これを使用してオプションのビューにリンクします。

{% url 'path.to.view' as the_url %}
{% if the_url %}
   <a href="{{ the_url }}">Link to optional stuff</a>
{% endif %}

それが役立つことを願っています。

于 2013-02-22T13:10:13.603 に答える
0

独自のURLタグを実装することで、多くの上位互換性の問題が発生する可能性があります。代わりにカスタム500エラーハンドラーを追加することをお勧めします:https ://docs.djangoproject.com/en/1.4/topics/http/views/#the-500-server-error-view

テンプレート開発者がタイプミスをした場合、実際にはビューでエラーをスローする必要があると思います。その動作をマスクしようとすると、非論理的に見えます-ビューが少なくとも200の応答コードを返していることを確認するための簡単な単体テストを行うのに十分な理由ではありませんか?

于 2013-02-21T14:25:42.223 に答える