Доступ к данным модели из базового шаблона Django - PullRequest
3 голосов
/ 10 октября 2010

У меня есть модель Category, и я хочу, чтобы ее объекты всегда отображались в меню навигации в моем base.html шаблоне (который расширяют все остальные мои шаблоны) .

Я хочу изучить лучшие практики, поэтому хотел бы знать, каков правильный / приемлемый способ предоставления этих данных в шаблон.

Ответы [ 3 ]

4 голосов
/ 29 декабря 2013

Я бы использовал пользовательский контекстный процессор:

В context_processors.py:

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

И добавьте его в свои settings.py:

TEMPLATE_CONTEXT_PROCESSORS = (
    # ... django's default context processors
    "your_app.context_processors.categories", 

)

2 голосов
/ 10 октября 2010

Вы можете создать пользовательский тег для категорий и поместить его в базовый шаблон. Таким образом, вам не нужно отправлять переменную "category" в контекст при каждом просмотре.

Удачи

0 голосов
/ 27 января 2016

Просто хедз-ап для тех, кто использует более поздние версии Django (т.е. 1.9): способ, которым Django определяет свои процессоры контекста, изменился.Вместо добавления к TEMPLATE_CONTEXT_PROCESSORS вы можете просто добавить строку в список контекстных процессоров Django:

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
            ],
        },
    },
]

Надеюсь, это поможет!

...