6

次のようなDjango Webサイトがあります。

  • サイトにはいくつかのビューがあります
  • 各ビューには、そのデータを表示するための独自のテンプレートがあります
  • 各テンプレートは基本テンプレートを拡張します
  • ベース テンプレートはサイトのベースであり、すべての JS/CSS と基本的なレイアウトが含まれています

だから今まではすべて順調です。これで、サイトのマスター ヘッド (ベース テンプレートに存在) ができました。これはすべてのビューに共通です。

しかし今、私はそれを動的にし、いくつかの動的データを追加したいと考えています。どのビューでこれを行いますか? 私の意見は基本的にすべてrender_to_response('viewtemplate.html', someContext)です。では、基本テンプレートに共通ビューを追加するにはどうすればよいでしょうか?

明らかに、共通コードを個別のビューごとに複製しません...

私は、Django の MVT 基盤に根本的な何かが欠けていると思います。

4

3 に答える 3

7

context_instanceとsを使用しますRequestContext

まず、あなたの先頭に追加しますviews.py

from django.template import RequestContext

次に、すべてのビューを次のように更新します。

def someview(request, ...)
    ...
    return render_to_response('viewtemplate.html', someContext, context_instance=RequestContext(request))

settings.pyに、次を追加します。

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.auth',
    ...
    'myproj.app.context_processors.dynamic',
    'myproj.app.context_processors.sidebar',
    'myproj.app.context_processors.etc',
)

これらはそれぞれ、オブジェクトを受け取り、辞書の形式でコンテキストを返すcontext_processors関数です。requestすべての機能をcontext_processors.py適切なアプリ内に配置するだけです。たとえば、ブログには、最近のエントリとコメントのリストを含むサイドバーがある場合があります。context_processors.py定義するだけです:

def sidebar(request):
    recent_entry_list = Entry.objects...
    recent_comment_list = Comment.objects...
    return {'recent_entry_list': recent_entry_list, 'recent_comment_list': recent_comment_list}

好きなだけ追加できます。

詳細については、Django テンプレート ドキュメントを参照してください。

于 2009-04-24T15:08:44.310 に答える
2

コンテキスト プロセッサと RequestContext (Tyler の回答を参照) は、ページの読み込みごとに使用されるデータを処理する方法です。すべてではないが、さまざまなビューで必要になる可能性があるデータ (特に、ビューの主な目的に実際には関連していないが、ナビゲーション サイドバーのようなものに表示されるデータ) の場合、カスタム テンプレートを定義することが最も理にかなっています。データを取得するためのタグ。

于 2009-04-27T11:51:17.847 に答える
-1

または、要求コンテキストが自動的に渡されるため、一般的なビューを使用します。

テンプレート汎用ビューへの単純なダイレクトを使用して、リクエストコンテキストでインポート/渡す必要を回避できます。

于 2009-04-24T15:50:48.700 に答える