Мне нужно показать некоторые статистические числа на всех страницах, поэтому я решил использовать контекстные процессоры. Но я просто понял, что моя функция называется от 2 до 7 раз за каждую загрузку страницы. Я делаю 4 запроса внутри функции, поэтому я получаю очень плохую производительность. Каждая загрузка страницы может занимать до 28 (4 * 7) запросов ...Django TEMPLATE_CONTEXT_PROCESSORS вызываются слишком много раз
Я хотел бы знать, почему это происходит и что я могу сделать, чтобы избежать этого.
settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.request',
'django.contrib.messages.context_processors.messages',
'django.core.context_processors.static',
'core.views.numbers',
)
views.py
def numeros(request):
...
a=table1.objects.count()
b=table2.objects.count()
c=table3.objects.count()
d=table4.objects.count()
...
return {'a': a,
'b': b,
'c': c,
'd': d,
'e': e,
'f': f,
'g': g,
'h': h
}
[ОБНОВЛЕНО - Спасибо] @okm и @catherine дает очень хорошее и дополняющее объяснение. Оба были правильными, поскольку, как сказал @okm, контекстные процессоры вызывались несколько раз, потому что я использовал RequestContext более одного раза.
@catherine также правильный. Нам нужно уделять больше внимания тому, что мы вкладываем в контекстные процессоры. Я изменил свой код, и я просто показываю статистические номера на целевой странице.
Контекстные процессоры * не * напрямую вызываются из настроек, они вызывается, когда инициализируется 'RequestContext'. Вы можете проверить код [здесь] (https://github.com/django/django/blob/stable/1.5.x/django/template/context.py#L170) – okm
@okm благодарит за информацию. Я никогда не пользовался RequestContext на мой взгляд. – catherine