在我的模板中:

<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变量,并使用contextt模板上呈现'Ajax'

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

更新!

load_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)


上面的Contextt应该来自render_widget方法。

最佳答案

您由于误解了模板标签的工作原理而陷入了逻辑循环:


您正在调用视图以进行响应
那么您的视图期望templatetag为其提供上下文
但是templatetags应该接收上下文,而不是提供它们


重新开始,不要使用templatetag:


调用视图以进行响应
将您的上下文与呈现模板所需的所有数据放在一起(毕竟这只是一个字典)
渲染并返回模板


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

view.py:

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


模板:

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

10-06 09:33