Django view не обновляет контекст должным образом

Так что у меня есть пользовательский тег шаблона, который довольно прост. Он принимает имя представления, отображает его и возвращает его содержимое. Проблема при использовании .as_view() на них попадает мне контент, кажется, он не правильно устанавливает контекст, потому что django-sekizai"s addtoblocks не правильно добавить в основной шаблон. С другой стороны, если я напрямую создаю экземпляр представления и вызываю .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() способ принять предыдущий контекст и внедрить его самостоятельно.

Другие вопросы по тегам