Django — процессоры контекста шаблона — взлом моего приложения

#python #django #django-templates #django-settings

#python #django #django-шаблоны #django-настройки

Вопрос:

Я пытался настроить процессор контекста шаблона, подобный тому, который упоминается в этой статье, чтобы я мог предоставлять информацию для каждого шаблона.

Я написал эту функцию в views.py:

 def items_in_cart(request):
    """Used by settings.TEMPLATE_CONTEXT_PROCESSORS to provide an item count
    to every template"""
    cart, lines = get_users_cart_and_lines(request)
    return {'items_in_cart': lines.count()}
  

И затем я добавил эту строку в settings.py:

 TEMPLATE_CONTEXT_PROCESSORS = ('Store.views.items_in_cart',)
  

Но теперь всякий раз, когда я захожу на любую страницу, я получаю эту ошибку:

 ImproperlyConfigured at /

Put 'django.contrib.auth.context_processors.auth' in your TEMPLATE_CONTEXT_PROCESSORS setting in order to use the admin application.
  

Я сделал что-то не так? Что здесь происходит? Я попытался выполнить то, что указано в ошибке, и затем он отобразит страницу, на которой отсутствуют все мои таблицы стилей и изображения.

Ответ №1:

В Django установлен набор TEMPLATE_CONTEXT_PROCESSORS по умолчанию, который вам нужно добавить вручную при добавлении вашего собственного. http://docs.djangoproject.com/en/1.3/ref/settings/#template-context-processors

В зависимости от вашей версии Django они разные, однако при использовании Django 1.3 у вас может получиться что-то вроде следующего

 TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "django.core.context_processors.static",
    "django.contrib.messages.context_processors.messages",
    "Store.views.items_in_cart",
)
  

Комментарии:

1. хм, могу ли я просто добавить свой в существующий список по умолчанию? Например, TEMPLATE_CONTEXT_PROCESSORS = secret_default_location. TEMPLATE_CONTEXT_PROCESSORS (‘Store.views.items_in_cart’,)

2. Вы должны иметь возможность использовать TEMPLATE_CONTEXT_PROCESSORS = (‘Store.views.items_in_cart’,) для добавления к значениям по умолчанию

3. Настройки django по умолчанию могут быть импортированы с помощью from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS над вашей строкой для добавления. Затем вы можете добавить к этому с помощью TEMPLATE_CONTEXT_PROCESSORS = ('Store.views.items_in_cart',)

4. В Django 1.10 значение удалено из, global_settings и следует использовать новую TEMPLATES настройку. Как следует переносить код, подобный приведенному выше, который добавляет настройки по умолчанию? Следует ли их просто включать вручную? Есть ли еще значение по умолчанию?