1

これが正しい方法かどうかはまだわかりませんが、そうではないかもしれませんが、とにかく質問します。Djangoで自分自身をもっと単純にしたとしても、ワードプレスを書き直したいと思います(正当化:できるからです)。ページ上でさまざまな方法で要素を構成できるようにしたいと思っています。たとえば、次のようになります。

  • ブログモデル
  • サイト更新メッセージモデル
  • 最新のコメントモデル。

ここで、サイトの各ページについて、ユーザーがそのページの順序とアイテムを選択できるようにします。私の思考プロセスでは、これは次のように機能します。

class Page(models.Model)
    Slug = models.CharField(max_length=100)

class PageItem(models.Model)
    Page = models.ForeignKey(Page)
    ItemType = models.CharField(max_length=100) # tells me which model to display
    InstanceNum = models.IntegerField() # tells me which instance of which model...

次に、理想的には、私のテンプレートはページ内のすべてのPageItemをループするので、簡単に実行できます。

しかし、私のページアイテムがブログ投稿ではなくサイト更新である場合はどうなりますか?基本的には、さまざまなアイテムタイプをさまざまな順序で引き出し、適切なテンプレートを使用して表示したいと考えています。さて、これを行う1つの方法は、views.pyすべてのオブジェクトをループして適切なビュー関数を呼び出し、HTMLを文字列として返し、それを結果のテンプレートにパイプすることだと思いました。

私の質問は-これは物事を行うための最良の方法ですか?もしそうなら、どうすればいいですか?そうでない場合は、どちらに行くべきですか?私はDjangoにかなり慣れていないので、Djangoで何ができるのか、何ができないのかをまだ学んでいます。ご容赦ください。私はSOの重複をチェックしましたが、これは以前に尋ねられたことがないと思います...

また、Django-cmsを調べて、それが役立つかどうかを確認しましたが、理解できませんでした。

助言がありますか?

4

2 に答える 2

2

まず、いくつかのpuzzelement。

 InstanceNum = models.IntegerField() # all models have primary keys.

Djangoでは、すべてのモデルに整数の主キーが割り当てられます。

このような主キーを追加する必要がないため、コメントは意味がありません。PageItemにはすでに主キーがあります。

また、属性には小文字を使用してください。クラス名には大文字のみを使用してください。お願いします。

「しかし、私のページアイテムがブログ投稿ではなくサイト更新である場合はどうなりますか?基本的に、さまざまなアイテムタイプをさまざまな順序でプルバックし、適切なテンプレートを使用して表示したいと考えています。」

タイプが異なれば、通常、モデルも異なります。漠然とした「PageItem」ではなく、「SiteUpdate」と「BlogPost」を別々のモデルにしたい場合があります。

次に、これらのさまざまなオブジェクトを反復処理して、テンプレートに表示できます。

HTML情報を返すメソッドを使用して、さまざまなモデルを簡単に定義できます。(一般的に)完全にベイク処理されたHTMLを返したくありません。ただし、CSSIDまたはクラス情報が役立つ場合があります。

class SiteUpdate( models.Model ):
    page = models.ForeignKey(Page)
    item_text = models.CharField(max_length=100)
    item_css_class = models.CharField(max_length=64)

これで、これを簡単なテンプレートに生成し、<div class="{{item.item_css_class}}">{{item.item_text}}</div>CSSを使用して、ブログ投稿とは対照的にサイトの更新を区別するフォーマットの詳細を処理できます。

于 2010-03-29T21:51:48.803 に答える
1

テンプレートタグは、include含めるテンプレートを含む変数を受け取ることができるため、さまざまなサブテンプレートを含むシーケンスをループして順番に含めることができます。たとえば、dictを使用して、わかりやすい名前をテンプレートファイル名にマップします。

于 2010-03-29T21:48:13.223 に答える