1

Django アプリを作成していて、アプリ内のすべてのテンプレートに特定の変数が必要だとします。

これに対処する「古典的な」方法は、コンテキスト プロセッサを記述し、それを settings.py の TEMPLATE_CONTEXT_PROCESSORS に追加することです。

私の質問は、アプリがそれらを使用する実際のプロジェクトから「独立」していることを考えると、これは正しい方法ですか?

つまり、そのアプリを新しいプロジェクトにデプロイするときに、プロジェクトがその設定を明示的にいじる必要を回避する方法はありますか?

4

3 に答える 3

1

コンテキストプロセッサは非常に便利で、恥ずかしがらずに使用できますが、状況によっては意味がありません。

これは、アプリのすべてのビューに単純なものを含める必要がある場合に使用する手法です。これが物事を行うための「適切な」方法であることを証明することはできませんが、それは私たちのチームにとってはうまくいきます:

template_varsファイルの先頭でグローバル辞書を宣言します。すべてのビューは、独自の変数をこのディクショナリに追加してテンプレートに渡しtemplate_varsrender_to_responseショートカットに戻ります。

これは次のようになります。

template_vars = {
    'spam': 'eggs',
    }

def gallery(request):
    """
    portfolio gallery
    """

    template_vars['projects'] = Projects.objects.all()
    return render_to_response('portfolio/gallery.html', template_vars, context_instance=RequestContext(request))
于 2010-05-09T14:33:26.747 に答える
1

プロジェクトの設定に触れずにアプリをプロジェクトに追加できるというあなたの仮定は正しくありません。

アプリケーションをプロジェクトに追加する場合は、タプルに追加する必要があるため、設定を編集する必要があります。INSTALLED_APPS

では、コンテキスト プロセッサ リストを編集してみませんか?

于 2010-05-09T14:48:37.153 に答える
-1

ええ、コンテキスト プロセッサを追加することは、これを実現するための最も推奨されるアプローチです。

于 2010-05-09T14:19:55.383 に答える