同じデータに対する異なる表示オプション

「楽しい」体験はますます増えています。 ここに狂気の別のケースがあります。 簡単に言えば:

異なるサンプリング条件(カテゴリ別、タグ別、「詰め物」など)と異なる表示(リスト、詳細など)で同じオブジェクトを表示する必要があるサイトがあります。


一部の個人は、各ビューでifの複雑な構造を作成し、そのたびに繰り返します。 覚えておいてください:

  1. リファクタリング
  2. リファクタリング
  3. リファクタリング
  4. ビューは単なる機能です!


そして最後のポイントです。 多くの人は、ビューがHttpResponseを返すだけの関数であると理解していないため、特定のディスプレイに固有のアクションを選択する方がはるかに有能です。 これは、メインビューの最後で呼び出すことで簡単に行えます。

  extra_viewを返す(リクエスト、オブジェクト= myobjects) 


認識を完全にするために、さらにコードを提供します。

 defリスト(リクエスト):
     「」
    すべてのオブジェクトをリストします
     「」
     myset = MyDataObject.objects.all()
     extra_view(リクエスト、myset)を返します
 defカテゴリ(リクエスト、category_id):
     「」
    カテゴリ別にオブジェクトをリストします
     「」
     category = get_object_or_404(カテゴリー、pk = category_id)
     myset = MyDataObject.objects.filter(category = category)
     extra_view(リクエスト、myset)を返します
 def extra_view(リクエスト、object_set):
     「」
    ラッパー
     「」
     view_type = request.GET.get( 'view_type'、 'list')
     render_to_response( 'view_type /%s.html'%view_type '、{' objects ':object_set}を返します


これは非常に単純な例です(申し訳ありませんが、少し書くのが面倒ですが、明らかな理由で動作するコードを表示できません)。 私はまだハングしています:ソート、日付による選択など。

デコレータを簡単に使用でき、すべてが少し変更されますが、これらは些細なことです(extra_viewを返す代わりに、関数はobject_setだけを返します;提示されたアプローチを理解しています)



PS>コードの有効性と美しさを忘れないでください。これは非常に重要です。

PPS>もちろん、この記事ではリファクタリングとMVCについて詳しく説明しますが、このエラーはdjangoプロジェクトでよく見られます。理由はわかりません。




All Articles