Контекст шаблона Django {{site}} не работает? - PullRequest
8 голосов
/ 23 февраля 2011

Это должно быть очень просто.Я уверен, что в прошлом я успешно использовал этот контекст в своих шаблонах для ссылок.Я полагал, что это было встроено в экземпляр RequestContext так или иначе.

запись SITE_ID в моем файле настроек верна.Я включил экземпляр RequestContext для всех моих представлений, и я включил приложение contrib.auth, которое может быть уместно в этом случае.

Встроен ли контекст {{site}} или я должен запросить объект Sites для экземпляра?

спасибо всем, Брендан

Ответы [ 2 ]

24 голосов
/ 23 февраля 2011

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']
2 голосов
/ 23 февраля 2011

Создание собственного контекстного процессора не помешает

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

Обратите внимание, что get_current () использует SITE_ID, который является глобальным параметром в проекте (определен в settings.py). Если вы собираетесь поддерживать несколько сайтов, вам понадобится переменная SITE_ID, чтобы изменить ее значение в зависимости от текущего сайта, к которому осуществляется доступ.

Здесь - хороший фрагмент кода, который заставит его работать.

...