如何使用Django中的Ajax从views.py中呈现模板标签Context?

时间:2012-06-17 21:06:40

标签: python django django-views django-templates

在我的模板中:

<div class="widget-content">
    {% render_widget settings %}
</div>

render_widget是一个模板标签,它带有settings个参数。

这里我们有templatetag中定义的方法代码:

def render_widget(settings):
   # some processing and then save into context
   t = get_template(#)      
  return t.render(Context(context))

上面的代码工作正常!上下文成功呈现给定模板。

现在我在load_ajax中创建了新方法views.py。应该在这个方法中发生以下事情:

load_ajax方法应采用context中的trender_widget变量,并使用{{1}在context模板上呈现t }}

我是Django和Ajax的新手。我该怎么办 ?

已更新!

load_ajax方法:

'Ajax'

上述def load_ajax(request): from myapp.templatetags.file_want_import import render_widget if request.ajax: # some code and render to the template with below lines return direct_to_template(request, t, extra_context=context) Context应来自t方法。

1 个答案:

答案 0 :(得分:0)

基于对模板标签工作原理的误解,你已陷入逻辑循环:

  • 您正在调用视图以获取回复
  • 然后您的视图期望templatetag为其提供上下文
  • 但是模板标签应该接收上下文,而不是提供它们

重新开始,不要使用模板标签:

  • 调用视图以获取响应
  • 将您的上下文与渲染模板所需的所有数据放在一起(毕竟它只是一本字典)
  • 渲染并返回模板

在视图中收集所有数据然后呈现模板会更容易。目前尚不清楚为什么需要模板标签。如果要渲染某些设置,只需将它们作为上下文的一部分传递给模板。例如:

view.py:

ctx = { "setting_var": settings.some_var }
return render_to_response(... context=ctx)

模板:

<div>
    {{ setting_var }}
</div>