【问题标题】:Django view not updating context properlyDjango视图没有正确更新上下文
【发布时间】:2012-09-04 11:34:51
【问题描述】:

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

【问题讨论】:

    标签: django django-templates django-sekizai


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 2012-12-17
      • 1970-01-01
      • 2021-04-16
      • 2014-06-30
      • 1970-01-01
      相关资源
      最近更新 更多