在我的模板中:
<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
中获取t
和render_widget
变量,并使用context
在t
模板上呈现'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)
上面的
Context
和t
应该来自render_widget
方法。 最佳答案
您由于误解了模板标签的工作原理而陷入了逻辑循环:
您正在调用视图以进行响应
那么您的视图期望templatetag为其提供上下文
但是templatetags应该接收上下文,而不是提供它们
重新开始,不要使用templatetag:
调用视图以进行响应
将您的上下文与呈现模板所需的所有数据放在一起(毕竟这只是一个字典)
渲染并返回模板
在视图中将所有数据收集在一起然后渲染模板会更容易。目前尚不清楚为什么需要模板标签。如果要渲染某些设置,只需将它们作为上下文的一部分传递到模板中即可。例如:
view.py:
ctx = { "setting_var": settings.some_var }
return render_to_response(... context=ctx)
模板:
<div>
{{ setting_var }}
</div>