2

所以我有一个自定义模板标签,这很简单。它接受一个视图名称,渲染它,然后返回它的内容。问题是,虽然.as_view()在它们上使用可以获得内容,但它似乎没有正确设置上下文,因为django-sekizai'saddtoblock没有正确添加到主模板。另一方面,如果我直接实例化视图并调用.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
4

1 回答 1

0

事实证明,继承的get()函数忽略任何预先存在的上下文并呈现它自己的(这是合乎逻辑的,因为视图不希望在其他视图中呈现),因此不允许sekizai更新它。直接调用.render_to_template()允许您提供上下文,因此它可以工作。重写get()方法以接受先前的上下文并注入自己的工作。

于 2012-09-04T12:29:34.113 回答