2010-02-14 3 views
2

Предположим, у меня есть сайт django и базовый шаблон для всех страниц с нижним колонтитулом, который я хочу отобразить на странице 5 лучших продуктов на моем сайте. Как я могу отправить этот список в базовый шаблон для рендеринга? Должно ли каждое представление отправлять эти данные в render_to_response? Должен ли я использовать template_tag? Как бы вы это сделали?Как отправить данные в базовый шаблон в Django?

+0

Хотя я уже ответил, вопрос был задан раньше: http://stackoverflow.com/questions/1030249/defining-global-variable-in-django-templates, http://stackoverflow.com/questions/2223429/ django-global-template-variables –

ответ

5

Вы должны использовать custom context processor. С помощью этого вы можете установить переменную, например. top_products, который будет доступен во всех ваших шаблонах.

E.g.

# in project/app/context_processors.py 
from app.models import Product 

def top_products(request): 
    return {'top_products': Products.objects.all()} # of course some filter here 

В вашем settings.py:

TEMPLATE_CONTEXT_PROCESSORS = (
    # maybe other here 
    'app.context_processors.top_products', 
) 

И в шаблоне:

{% for product in top_products %} 
    ... 
+0

Я попробую. Звучит так же, как и то, что я искал. –

+0

Просто остаток. Процесс добавления контекстного процессора изменяется в более поздней версии Django. Квест проекта может быть удовлетворен в соответствии с принятым ответом этого вопроса также - https://stackoverflow.com/questions/34902707/how-can-i-pass-data-to-django-layouts-like-base-html-without-having -в-Provi – ni8mr

-1

Всего голов вверх для тех, кто с помощью более поздних версий Джанго (т.е. 1.9): Кстати, что Джанго определяет, что его процессоры контекста изменились. Вместо добавления к TEMPLATE_CONTEXT_PROCESSORS вы можете просто добавить строку в список Джанго контекстных процессоров:

TEMPLATES = [ 
{ 
    'BACKEND': 'django.template.backends.django.DjangoTemplates', 
    'DIRS': [], 
    'APP_DIRS': True, 
    'OPTIONS': { 
     'context_processors': [ 
      'django.template.context_processors.debug', 
      'django.template.context_processors.request', 
      'django.contrib.auth.context_processors.auth', 
      'django.contrib.messages.context_processors.messages', 
      'app.context_processors.your_processor', # CHANGE THIS 
      ], 
     }, 
    }, 
] 

Все остальное то же самое. Надеюсь это поможет!

Смежные вопросы