Как использовать функцию просмотра на всех страницах в Django?

#django #view #django-views

#django #Вид #django-просмотры

Вопрос:

Я создаю приложение в Django, в котором у меня есть макет, в котором у меня есть панель навигации, и я расширяю этот макет на каждую страницу.

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

Как я могу написать функцию один раз? Я думаю, что-то вроде глобальной переменной в Django.

Надеюсь, мне удалось хорошо объясниться, заранее спасибо!

Ответ №1:

сначала вы создаете context_processors.py где-то в вашем приложении. затем вы пишете необходимую функцию, что-то вроде:

 from .models imoprt Somemodel

def alltimefunc(request):
     something = Somemodel.objects.all()
     return something
 

наконец, вы добавляете его в settings.py

 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',
            'your_app_name.context_processors.alltimefunc',  #here
        ],
    },
   },
  ]
 

Ответ №2:

В таких ситуациях пригодятся контекстные процессоры. Вы можете написать функцию и зарегистрировать ее в движке шаблонов в settings.py досье. Таким образом, вы можете написать код один раз, и это повлияет непосредственно на макет.