2015-03-20 3 views
0

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

Мне нужно передать объект categories = Category.objects.all() в КАЖДЫЙ вид или есть ли простой способ достичь этого?

ответ

2

Да, посмотрите на context processors:

MyApp/context_processors.py

def categories(request): 
    return {'categories': Category.objects.all()} 

А затем добавьте к этому TEMPLATE_CONTEXT_PROCESSORS установка:

TEMPLATE_CONTEXT_PROCESSORS = (
    ... 
    "myapp.context_processors.categories", 
) 
+0

это работает, спасибо! – Doc

1

Существует простое решение, вы можно использовать template context processor. Просто создайте в своем файле приложения с именем context_processors (имя этого файла не имеет значения, но хорошая практика - назвать его таким образом), и внутри этого файла создаются любые функции, которые будут принимать аргумент запроса и возвращать словарь с дополнительными переменными контекста. Пример:

from .models import Category 

def categories(request): 
    categories = Category.objects.all() 

    return { 
     'categories': categories, 
    } 

Теперь просто добавьте процессор контекста в настройки:

TEMPLATE_CONTEXT_PROCESSORS += (
    'yourapp.context_processors.categories', 
) 
Смежные вопросы