0

ほとんどの場合、モデルプロパティから取得するエラーは、データを保存しているときに発生します。たとえば、文字列をIntegerPropertyとして保存しようとすると、エラーが発生します。

唯一の例外(しゃれは意図されていません)はReferencePropertyです。参照がたくさんあり、悪い参照を残すことに完全に注意していない場合は、「TemplateSyntaxError:レンダリング中に例外が発生しました:ReferencePropertyを解決できませんでした」などのエラーが表示されるのが一般的です。

これは、ビューに不正な参照が1つしかない場合です。ドー。

try / exceptionブロックを記述して、すべての参照プロパティにアクセスし、例外が発生した場合にそれらを削除しようとすることもできますが、この機能は、私が使用する方法よりも一般的な方法があれば、他の多くの開発者にとって確かに役立つ可能性があります。書くことができる。モデルタイプのリストを取得し、各モデルの各エンティティの各参照プロパティにアクセスしようとし、例外が発生した場合はプロパティをNoneに設定すると思います。

自分でこれを実行できるかどうかはわかりますが、開始するための提案/スニペットがあると間違いなく役立ちます。

4

3 に答える 3

1

私は自分のプロジェクトで同様の問題を抱えています。アプリケーションのベータ版をコーディングしていると、多くのデッド リンクが作成され、後でそれらを解きほぐすのが非常に面倒です。理想的には、コード内の問題を特定できるように、このツールは問題のある参照も報告する必要があります。

于 2008-12-15T02:18:47.723 に答える
0

ReferenceProperty を拡張およびカスタマイズして、この例外をスローしないようにすることもできますが、何か (おそらく None) を返す必要があります。その場合、返されたオブジェクトのプロパティにアクセスしようとすると、テンプレートは単純に例外をスローします。

テンプレートをレンダリングする前に、参照プロパティを取得し、それが有効であることを確認することをお勧めします。ReferenceProperties は参照をキャッシュするため、プリフェッチによって余分なデータストア呼び出しが発生することはありません。

于 2008-12-17T11:07:12.273 に答える
0

この例外は実際にはバグであり、しばらく修正されるのを待っていました ( http://code.google.com/p/googleappengine/issues/detail?id=426を参照)。理想的には、次のように参照が有効かどうかをテストできる必要があります (アプリ エンジンのドキュメントから)。

obj1 = db.get(obj2.reference)

if not obj1:
  # Referenced entity was deleted.
于 2010-01-28T03:51:19.057 に答える