Djangoアプリからコンテキストプロセッサを追加する方法
-
04-10-2019 - |
質問
Djangoアプリを書いているとします。アプリのすべてのテンプレートには特定の変数が必要です。
これに対処する「クラシック」の方法であるAFAIKは、コンテキストプロセッサを作成し、settings.pyのtemplate_context_processorsに追加することです。
私の質問はです, 、これは、アプリが実際のプロジェクトを使用して「独立している」と考えられていることを考えると、それを行う正しい方法ですか?
言い換えれば、そのアプリを新しいプロジェクトに展開するとき、プロジェクトが設定を明示的に混乱させる必要がないことを避ける方法はありますか?
解決
プロジェクトの設定に触れることなくプロジェクトにアプリを追加できるという仮定は正しくありません。
プロジェクトにアプリケーションを追加する場合、 設定を編集する必要があります, 、あなたはそれをに追加する必要があるので INSTALLED_APPS
タプル。
では、コンテキストプロセッサリストを編集してみませんか?
他のヒント
コンテキストプロセッサは非常に便利であり、私はそれらを使用することにあまり恥ずかしくないでしょうが、状況によっては意味がありません。
これは、アプリにすべてのビューに簡単なものを含める必要があるときに使用する手法です。これが物事を行う「適切な」方法であることを証明することはできませんが、それは私たちのチームで働いています。
グローバル辞書を宣言します template_vars
ファイルの上部に。すべてのビューはこの辞書に独自の変数を追加し、それをテンプレートに渡すと、それは戻ります template_vars
の中に render_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))
ええ、コンテキストプロセッサを追加することは、これを達成するための最も推奨されるアプローチです。