2012-09-04 21 views
2

所以我有一個自定義模板標籤,這很簡單。它需要一個視圖名稱,呈現它並返回其內容。問題是,雖然在他們上使用.as_view()可以讓我獲得內容,但似乎沒有正確設置上下文,因爲django-sekizaiaddtoblock s沒有正確添加到主模板。另一方面,如果我直接實例化視圖並調用.render_to_response(context).render(),則上下文將更新,並且sekizai會將塊數據注入基本模板。但是,這第二種方法將不能正確呈現表單(其中.as_view())。有沒有辦法做到這一點不骯髒地調用兩者?Django視圖沒有正確更新上下文

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 

回答

0

事實證明,繼承get()函數忽略任何預先存在的上下文,並呈現其自己的(這是符合邏輯的,因爲視圖不希望被其他視圖中呈現的),因此不會讓sekizai更新它。直接調用.render_to_template()允許您提供上下文,因此它可以工作。重寫get()方法來接受之前的上下文並注入自己的工作。