【发布时间】:2012-05-30 08:46:50
【问题描述】:
我陷入了一个非常奇怪的境地。在 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.is.ajax():` 所必需的)。但我无法找到任何方法将此参数发送到 ajax..method
我通过写作尝试了这个:
return ajax_print_widget(request, t, context)
但它显示错误,即请求不是全局变量(很明显) 如果我在上面粘贴其余代码,那么它会显示另一个错误,即 ajax_print 需要 3 个参数并给出 2 个(右) 现在我没有得到任何提示来解决这个问题,如果不通过请求,它对我不起作用。
除此之外,我对模板标签有疑问。我什至搜索了这个 render_widget 方法,但在任何文件中都没有找到它被调用的地方。能否请您告诉我模板标签的意义。模板标签中定义的方法是从某个地方调用的,或者为什么我们在模板标签中写这个?
【问题讨论】:
标签: django django-views django-templates django-ajax-selects