私はWebアプリケーションを書いています(Pythonで、それは問題ではありません)。機能の 1 つは、人々が物事にコメントを残すことができることです。基本的に次のようなコメント用のクラスがあります。
class Comment:
user = ...
# other stuff
はuser
別のクラスのインスタンスです。
class User:
name = ...
# other stuff
そしてもちろん、私のテンプレートには、
<div>${comment.user.name}</div>
問題: たとえば、人々が匿名でコメントを投稿できるようにするとします。その場合comment.user
はNone
(未定義)であり、もちろんアクセスするcomment.user.name
とエラーが発生します。それに対処する最善の方法は何ですか?次の 3 つの可能性があります。
- テンプレートで条件を使用してそのケースをテストし、別のものを表示します。匿名のコメントの表示方法を、たとえば「投稿者...」ではなく「匿名で投稿」に変更できるため、これは最も用途の広いソリューションですが、テンプレートは気にせずに表示する必要があるとよく言われます。そのようなロジックは含まれません。また、他の人が同じアプリケーション用の別のテンプレートを作成することになるかもしれません。私は、テンプレート作成者のために物事をできるだけ簡単にする必要があると感じています。
- 実際のユーザーが定義されていない場合にダミーのユーザー オブジェクトを返す aの
user
プロパティのアクセサー メソッドを実装します。Comment
このダミー オブジェクトには、user.name = 'Anonymous'
またはそのようなものがあるため、テンプレートはそれにアクセスして、その名前をエラーなしで出力できます。 user.name = Anonymous
(またはそのような)ユーザーに対応する実際のレコードをデータベースに入れ、誰もログインしていないときに投稿されたコメントにそのユーザーを割り当てるだけです。このように動作する実世界のシステムを見たことがあります。(phpBB?)
これらのシステム (または他のソリューション) のどれが最適かについて、この種のシステムを作成する人々の間で広く知られている知識はありますか? ある方向から別の方向に進む場合に注意すべき落とし穴はありますか? 最も適切な説明をした人にチェックマークが付けられます。