Форум сайта python.su
Идея такая: на каждой (почти) странице моего проекта есть один элемент (типа пользовательское меню).
Самый очевидный вариант - в каждый шаблон вставлять этот элемент, и каждый раз заново просчитывать контекст для этого меню. Мне это кажется не слишком оптимальным, и, в первую очередь - не удобным. Вдруг я захочу потом изменить что-то в этом меню, и мне придётся перелопатить +100500 шаблонов и представлений.
Есть ли возможность проще организовать такой момент?
Офлайн
Самый очевидный вариант - templatetag
Офлайн
KudriaОй, а как этим пользоваться? Я на Djbook посмотрел - отхватил рак мозга. Объясните?
Самый очевидный вариант - templatetag
Офлайн
самый очевидный вариант - это выделить этот элемент в отдельный шаблон который включать в целевой шаблон
Офлайн
1) написать функцию, которая собирает и возвращает нужные переменные контекста (в виде словаря)
2) использовать RequestContext, которому передавать данные из вашей функции, в коде это будет выглядеть так:
from django.template import RequestContext from my_module import get_context # сюда подставить имя и путь для вашей функции ... def my_view(request): form = ... tittle = 'Заголовок моей супер-страницы' .... return render_to_response('your_template.html', { 'form':form, 'title':title, }, context_instance=RequestContext(request, processors=[get_context]))
Отредактировано Elaphe (Окт. 10, 2016 12:28:36)
Офлайн
Для вывода на всех страницах можно добавить свой context_processors в settings.py
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR,'templates')], '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', 'extra_context.vars', # мой контекст процессор ], }, }, ]
#-*- encoding: utf-8 -*- def vars(request): return { "var_anywhere":"anywhere_value", }
Офлайн
BearProPython - объектно ориентированный язык программирования. Очевидно, что раскрыть всю мощь языка можно только используя его ключевые особенности. Поэтому советую сразу на начальном этапе забыть про представления-функции и освоить представления-классы. Имея базовый класс и наследуя его вы получите то что хотите - одинаковое поведение разных представлений без копирования кода и без всякой мутной ерунды типа контекст-процессоров.
Есть ли возможность проще организовать такой момент?
Офлайн