我陷入了一个非常奇怪的境地。在 templatetag/somefile.py 中定义了两个方法,命名为:ajax_print_widget和render_widget
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')和所需的数据('context')
- 2.现在我需要将这两个变量作为参数传递给 ajax_print_widget 方法,方法是在从 render_widget 返回时调用它(参见代码)
- 3. 如您所见,我需要一个额外的参数,即 ajax_...方法中的 'request'(检查 `request.is.ajax():` 所必需的)。但我无法找到任何方法将此参数发送到 ajax..method
我通过写作尝试了这一点:
return ajax_print_widget(request, t, context)
但它显示一个错误,即请求不是全局变量(这很明显),如果我将其余代码粘贴在上面,那么它会显示另一个错误,即 ajax_print 需要 3 个参数并给出 2 个(对)现在我我没有得到任何提示来解决这个问题,并且没有通过请求它对我不起作用。
除此之外,我对模板标签有疑问。我什至搜索了这个 render_widget 方法,但我没有在任何文件中找到它被调用的地方。能否请您告诉我模板标签的意义。在模板标签中定义的方法是从某个地方调用的,或者为什么我们在模板标签中写这个?