我陷入了一個非常奇怪的境地。有在templatetag/somefile.py定義與名爲兩個方法:ajax_print_widget和render_widget如何在調用django中的模板標籤中的方法時傳遞「request」參數
def ajax_print_widget(request, template, context1):
if request.is_ajax():
q = request.GET.get('q')
if q is not None:
data = {
'results': context1,
}
import pdb; pdb.set_trace()
return render_to_response(template, data,
context_instance = RequestContext(request))
@register.simple_tag
def render_widget(widget_settings):
widget = widget_settings.get_widget()
template_name = widget.template_name
context = widget.context(widget=widget_settings)
t = get_template("widgets/%s" % template_name)
return ajax_print_widget(t,context)
我的主要動機是通過使用Ajax(如我檢查在ajax_print_widget方法)中的數據並呈現它到一個模板,其餘的東西將由jQuery在給定的模板名稱中處理。爲了執行該事我正在執行以下步驟:
-
1.在render_widget方法我得到兩個可變我需要對Ajax目的即模板名稱(「T」)和所需要的數據(「語境」)
-
2.現在我需要通過這兩個變量作爲參數通過從render_widget返回時調用它ajax_print_widget方法(見代碼)
-
3.正如你看到的,我需要一個額外的參數,即'請求'在ajax _...方法(需要檢查`request.is.ajax():`)。但我無法找到任何方式來發送這個參數來ajax..method
我通過寫作嘗試這樣做:
return ajax_print_widget(request, t, context)
但它顯示一個錯誤,即請求不是一個全局變量(這是顯而易見的) ,如果我留下其餘的代碼,因爲我粘貼它上面然後它顯示另一個錯誤,即ajax_print需要3個參數和2給出(右) 現在我沒有得到任何提示來解決這個問題,請求它不能爲我工作。
除此之外,我對模板標籤有疑問。我甚至搜索這個render_widget方法,並且我沒有在它被調用的任何文件中找到。你還請告訴我模板標籤的重要性。模板標籤中定義的方法是從某處調用的,或者爲什麼我們在模板標籤中寫入該標籤?
Thenx用於回覆@Mark。我檢查了TEMPLATE_CONTEXT ...,並且它已經存在,並且它已經存在django.core.context_processors.request。然後我改變裝飾器,當你告訴我什麼時候它運行它顯示**任何標籤函數裝飾與takes_context = True必須有第一個參數'上下文**這個錯誤。請幫助我,我是Django的新手:) –
請按照錯誤消息和我的示例代碼。更改標籤的第一個參數以獲取上下文。 –
對不起@Mark我沒有得到這個。我應該在哪裏做出改變? –