8

これは非常に単純なものでなければなりません。リンクの目的で、過去にこのコンテキストをテンプレートで正常に使用したことがあると確信しています。私の信念は、これが何らかの形でRequestContextインスタンスに組み込まれているということでした。

設定ファイルのSITE_IDレコードが正しいです。すべてのビューにRequestContextインスタンスを含め、contrib.authアプリを含めました。これは、この場合に関連する可能性があります。

{{site}}コンテキストは何らかの形で組み込まれていますか、それともインスタンスのSitesオブジェクトをクエリする必要がありますか?

みんなありがとう、ブレンダン

4

2 に答える 2

24

Django は明示的であるように努めているため、それ自体でコンテキストを設定することはほとんどありません。{{site}}に設定するコンテキスト プロセッサが必要settings.CONTEXT_PROCESSORSです。確認django.core.context_processorsしたところ、django.contrib.sitesを設定するプロセッサはありませんsite。したがって、おそらくそれを行うサードパーティのコンテキストプロセッサがありました。

コンテキスト プロセッサを作成するのは非常に簡単です。

myproject/context_processors.py:

    from django.contrib.sites.models import Site

    def site(request):
        return {
            'site': Site.objects.get_current()
        }

myproject/settings.py:

    CONTEXT_PROCESSORS += ['myproject.context_processors.site']
于 2011-02-23T18:29:53.893 に答える
2

カスタムコンテキストプロセッサを作成しても問題ありません

def site(request):
    return {'site': Site.objects.get_current()}

get_current()は、プロジェクトのグローバル設定(settings.pyで定義)であるSITE_IDを使用することに注意してください。マルチサイトをサポートする場合は、アクセスしている現在のサイトに応じて値を変更するためにSITE_ID変数が必要です。

これは、それを機能させるための素晴らしいスニペットです。

于 2011-02-23T18:51:19.040 に答える