0

これは非常に基本的なことのように思えるかもしれませんが、私には推測できますが、ビュー内にビューを作成する方法、より正確には動的テンプレート内に動的テンプレートを作成する方法です。ご覧のとおり、特定の事柄に関する統計を含むこれらの html ブロッ​​クがあります。これらのボックスの 1 つを返すビューを作成して、別のビューがそれらをテンプレート ブロックに挿入できるようにするにはどうすればよいでしょうか? それを返す関数を持っているだけで「大丈夫」ですか、それとも通常の関数のfunctionName(request)代わりに同じことに従う必要がありますか。functionName(info1, info2, info3)これは、ある種の標準があるほど一般的なことのように思えます。

4

2 に答える 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 に答える