Ami*_*Pal 1 django django-templates django-views django-ajax-selects
我陷入了一种非常奇怪的境地.在templatestag/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)
Run Code Online (Sandbox Code Playgroud)
我的主要动机是使用Ajax传递数据(因为我正在检查ajax_print_widget方法)并将其呈现为模板,其余部分将由给定模板名称中的jquery处理.要执行此操作,我执行以下步骤:
我试着写这个:
return ajax_print_widget(request, t, context)
Run Code Online (Sandbox Code Playgroud)
但它显示一个错误,即请求不是一个全局变量(很明显),如果我把剩下的代码粘贴在上面然后它显示另一个错误,即ajax_print需要3个参数,2个给出(右)现在我我没有得到任何解决这个问题的提示,如果没有通过请求,它对我不起作用.
除此之外我对模板标签有疑问.我甚至搜索这个render_widget方法,我没有在任何调用它的文件中找到它.您还能告诉我模板标签的重要性吗?模板标签中定义的方法是从某个地方调用的,还是为什么我们在模板标签中写这个?
如果您django.core.context_processors.request在TEMPLATE_CONTEXT_PROCESSORS设置中启用(默认情况下不在此处)并将标记更改为,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
Run Code Online (Sandbox Code Playgroud)
请注意,这还需要使用a来呈现模板RequestContext.
| 归档时间: |
|
| 查看次数: |
790 次 |
| 最近记录: |