#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 досье. Таким образом, вы можете написать код один раз, и это повлияет непосредственно на макет.