2011-12-24 20 views
2

我一直在嘗試使用更新yourlabs訂閱例如,安裝一直很好,除了yourlabs認購錯誤 - 捕獲VariableDoesNotExist而呈現

  • 每個視圖在訂閱應用程序返回請求渲染模板中的變量。

  • 這個request context變量沒有在模板中獲得,因此我收到以下錯誤

    Caught VariableDoesNotExist while rendering: Failed lookup for key [request] in u

因爲這是每個視圖返回我解決不了這個在一個特定的模板

+0

在yourlabs訂閱使用shortcuts.render的觀點和不通過請求對象中的上下文。它通過請求對象django.shortcut.render,以便它可以運行上下文處理器。 django.core.context_processors.request是上下文處理器,設置在上下文請求。 – jpic 2012-01-16 15:39:33

回答

2

這是發生,因爲request做一些調整,問題是不是在你的模板的上下文和模板是EXPEC使用一些模板代碼定它在那裏。該代碼(例如一個自定義模板標籤)應better handleVariableDoesNotExist

此外,您的看法或許不應該在每一個響應返回request明確。讓Django爲你處理這個問題。

要做到這一點,添加request template context processor附帶的Django您TEMPLATE_CONTEXT_PROCESSORS

TEMPLATE_CONTEXT_PROCESSORS = (
    ... 
    'django.core.context_processors.request', 
    ... 
) 

如果您已經在使用此模板背景處理器,確保render_to_response被稱爲與context_instance=RequestContext(request)作爲最後一個參數(以下實例是來自docs):

def some_view(request): 
# ... 
return render_to_response('my_template.html', 
          my_data_dictionary, 
          context_instance=RequestContext(request)) 

這確保了所有的類型的字典中返回由模板上下文處理器被傳遞給模板。

您也可以使用rendershortcut,它會自動渲染的Requestcontext實例的模板。

在Django 1.3中添加的另一個選項是TemplateResponse,它也將使用RequestContext的實例。

+0

渲染快捷* *是什麼yourlabs認購視圖使用。 – jpic 2012-01-16 15:40:27