@fovka

Как правильно создать свой context_processors в Django?

Прошу прощения, но я с документацией не разобрался. Хочу сделать контекст доступным во всех шаблонах, но при этом не переписывать все его переменные в каждой вьюшке.
1. Создаю context_processors.py на одном уровне с settings.py:
from django.core.context_processors import request
def site(request):
    return {'key':'arg',...}

2. В settings.py прописываю:
TEMPLATES = [
    {  ...
        'OPTIONS': {
            'context_processors': [
                ...
                'context_processors.site'
            ],
        },
    },
]

3. Надеюсь теперь получить доступ к {{ key }} из любого шаблона. Но надежды разбиваются об ошибку:
No module named 'context_processors'

Где туплю?
  • Вопрос задан
  • 43 просмотра
Решения вопроса 1
tema_sun
@tema_sun
Вангую, что путь неправильный. Попробуйте что-то вроде такого 'project_name.context_processors.site'
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Тебе не нужно создавать свой контект-процессор. В данной ситуации подойдут templatetags.
  1. В каталоге приложения создаёшь каталог templatetags.
  2. В каталоге templatetags создаёшь файл __init__.py и название тега(пусть будет some_tags.py).
  3. В some_tags.py вставляй код ниже.
  4. В <> симвллах твой код


# Файл some_tags.py 
from django import template
from monitoring.models import <Your model> 

register = template.Library()

@register.simple_tag()
def get_<some>():
    return <Your model>.objects.all()


# В файлах .html
{% load some_tags %} # Подгружаем теги
{% get_<some> as objects %} # Используем функцию, которую прописали в файле some_tags.py
{% for obj in objects %}
{% endfor %}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы