Skip to main content
 首页 » 编程设计

python之如何在 Django 中使用 Ajax 从 views.py 渲染 templatetag 上下文

2025年05月04日26傻小

在我的模板中:

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

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

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

此load_ajax 方法应从render_widget 获取context 和t 变量并渲染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方法。

请您参考如下方法:

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

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

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

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

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

View .py:

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

模板:

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