0

この概念を「Django流」に実装する方法について、ここでいくつかのガイダンスを探しています。

サイト レベルの変数を定義するために dbsettings を使用しています。リクエストごとに、サイト レベルの変数の 1 つをチェックし、その変数の値に基づいて異なるレスポンスをレンダリングしたいと考えています。

各ビュー関数に単純な if ステートメントを追加するだけでこれを簡単に達成できることがわかりましたが、これをより高いレベルで適用できる方法があるのではないかと思いました。

すべてのリクエストでこの機能を「グローバル化」する方法があるかどうか教えてください。ありがとう。

4

2 に答える 2

1

実際、設定が最初に選択されたテンプレートに影響する場合、または応答に大幅に影響する場合、おそらく本当に必要なのはミドルウェアです。これは、テンプレート コンテキスト プロセッサを使用するよりもはるかに柔軟であり、コンテキストにいくつかの変数を追加するだけの場合に適しています。

アプリで middleware.py を作成します。これには次のようなものが含まれる場合があります。

from django.conf import settings

class MyMiddleware(object):
    def process_request(self, request):
        request.my_app_setting = settings.MY_APP_SETTING

クラスを MIDDLEWARE_CLASSES 設定に追加することを忘れないでください。

于 2013-03-11T01:47:08.947 に答える
0

カスタムテンプレート コンテキスト プロセッサを使用して、"グローバル" コンテキストをビューに渡すことができます。

これを実現するには、アプリケーションのどこかに新しい contextprocessors.py を作成し、以下の例のようなコードを作成します (必要なのは、dict を返すことだけです)。次に、settings.py のTEMPLATE_CONTEXT_PROCESSORSタプルに関数を含むファイルへのパスを追加します (例: yourapp.contextprocessors.resource_urls)。

from django.conf import settings

def resource_urls(request):
    """Passes global values to templates."""

    return dict(
        TIME_ZONE = settings.TIME_ZONE,
    )

これで、テンプレートでこれらのキーを期待どおりに参照できるようになりました: {{ TIME_ZONE }}.

于 2013-03-11T01:38:13.013 に答える