これは非常に基本的なことのように思えるかもしれませんが、私には推測できますが、ビュー内にビューを作成する方法、より正確には動的テンプレート内に動的テンプレートを作成する方法です。ご覧のとおり、特定の事柄に関する統計を含むこれらの html ブロックがあります。これらのボックスの 1 つを返すビューを作成して、別のビューがそれらをテンプレート ブロックに挿入できるようにするにはどうすればよいでしょうか? それを返す関数を持っているだけで「大丈夫」ですか、それとも通常の関数のfunctionName(request)
代わりに同じことに従う必要がありますか。functionName(info1, info2, info3)
これは、ある種の標準があるほど一般的なことのように思えます。
質問する
144 次
2 に答える
2
これは、まさにカスタム テンプレート タグ(特に包含タグ) の目的です。
于 2012-08-03T19:43:39.680 に答える
1
私があなたを理解しているなら、あなたは基本的にテンプレートコンテキストを事前に設定することについて話している. 基本的に、いくつかのビューに共通のコンテキストが存在することを望みますが、ビューごとに同じことを繰り返したくはありません。関数ベースのビューを使用する最善の方法は、これを処理するジェネリック メソッドを単純に持つことです。
def add_some_context(context={}):
context['foo'] = 'bar'
return context
def view1(self, request):
context = {
'something1': 'blah',
}
return render_to_response('template1.html', add_some_context(context), context_instance=RequestContext(request))
def view2(self, request):
context = {
'something2': 'blah',
}
return render_to_response('template2.html', add_some_context(context), context_instance=RequestContext(request))
両方のビューには、foo
使用できるコンテキスト変数があります。クラスベースのビューでそれを行うと、ミックスイン クラスを作成できます。
class MyViewMixin(object):
def get_context_data(self, **kwargs):
context = super(MyViewMixin, self).get_context_data(**kwargs)
context['foo'] = 'bar'
return context
class MyView1(MyViewMixin, DetailView):
...
class MyView2(MyViewMixin, ListView):
...
これを実際のテンプレートに追加するときが来たら、各ビューのテンプレートfoo
に、何らかの方法でコンテキスト変数を実装するテンプレートから継承させることができます。
すべてのビューに適用する必要がある場合は、コンテキスト プロセッサの方が適していますが、少数のビューのみを対象とする場合は、これら 2 つの方法が適しています。
于 2012-08-03T19:52:04.453 に答える