Django view не обновляет контекст должным образом
Так что у меня есть пользовательский тег шаблона, который довольно прост. Он принимает имя представления, отображает его и возвращает его содержимое. Проблема при использовании .as_view()
на них попадает мне контент, кажется, он не правильно устанавливает контекст, потому что django-sekizai
"s addtoblock
s не правильно добавить в основной шаблон. С другой стороны, если я напрямую создаю экземпляр представления и вызываю .render_to_response(context).render()
на нем контекст будет обновляться и sekizai
вставит данные блока в базовый шаблон. Тем не менее, этот второй подход не будет правильно отображать формы (которые .as_view()
делает). Есть ли способ сделать это без грязного вызова обоих?
class PopupNode(template.base.Node):
def __init__(self, popup):
self.popup = popup
def render(self, context):
# only needed to update context
view_object = self.popup()
view_object.request = context['request']
view_object.render_to_response(context).render()
# actual content
view_function = self.popup.as_view()
template_response = view_function(context['request'], context=context)
template_response.render()
return template_response.content
1 ответ
Как оказалось, наследственное get()
функция игнорирует любой ранее существующий контекст и отображает свой собственный (что логично, поскольку представления не ожидают отображения в других представлениях), таким образом, не позволяя sekizai
обнови это. призвание .render_to_template()
позволяет напрямую предоставлять контекст, поэтому он работает. Переопределение get()
способ принять предыдущий контекст и внедрить его самостоятельно.