我陷入了一种非常奇怪的境地。在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处理。为了执行这些操作,我正在执行以下步骤:
我试着写这个:
return ajax_print_widget(request, t, context)
但它显示错误,即请求不是全局变量(很明显) 如果我把剩下的代码留在上面,那么它会显示另一个错误,即ajax_print需要3个参数,2个给出(右) 现在我没有得到任何解决这个问题的提示,如果没有通过请求就无法解决这个问题。
除此之外我对模板标签有疑问。我甚至搜索这个render_widget方法,我没有在任何调用它的文件中找到它。您还能告诉我模板标签的重要性吗?模板标签中定义的方法是从某个地方调用的,还是为什么我们在模板标签中写这个?
答案 0 :(得分:5)
如果您在TEMPLATE_CONTEXT_PROCESSORS
设置中启用了django.core.context_processors.request
(默认情况下不在此处)并将您的代码更改为takes_context=True
,那么您可以在模板代码中获取请求。 https://docs.djangoproject.com/en/1.3/howto/custom-template-tags/#simple-tags
@register.simple_tag(takes_context=True)
def render_widget(context, widget_settings):
request = context.get('request')
# Rest of the tag goes here
请注意,这还需要使用RequestContext
呈现模板。