gpt4 book ai didi

python - 在 Ajax 调用之后使用 Django 模板呈现 JSON 对象

转载 作者:IT老高 更新时间:2023-10-28 12:43:56 29 4
gpt4 key购买 nike

我一直在尝试了解最佳的处理方式AjaxDjango .通过阅读这里和那里的东西,我收集到常见的过程是:

  1. 使用 JavaScript 制定您的 Ajax 调用库(例如,jQuery),在 Django 中设置一个 URL 模式来捕获调用并将其传递给 View 函数

  2. Python View 函数检索您感兴趣的对象并将它们以 JSON 格式或类似格式发送回客户端(通过使用内置的序列化模块或 simplejson)

  3. 在 JavaScript 中定义一个回调函数,接收 JSON 数据并解析它们,以便创建需要显示的任何 HTML。最后,JavaScript 脚本将 HTML 放在它应该保留的任何位置。

现在,我仍然不明白Django 模板与所有这些有什么关系? 显然,我们根本没有利用模板的力量。理想情况下,我认为传回 JSON 对象和模板名称会很好,这样可以迭代数据并创建 HTML block 。但也许我在这里完全错了......

我发现的唯一资源是 this snippet (769)但我还没有尝试过。显然,在这种情况下将发生的事情是所有生成的 HTML 都是在服务器端创建的,然后传递给客户端。 JavaScript 回调函数只需将其显示在正确的位置即可。

这会导致性能问题吗?如果没有,即使不使用上面的代码片段,为什么不直接在后端使用 Python 而不是前端格式化 HTML?

非常感谢!

更新:请使用 snippet 942因为它是上述版本的增强版本!我发现这种方式的继承支持效果更好..

最佳答案

嘿,谢谢 vikingosegundo!

我也喜欢使用装饰器 :-)。但与此同时,我一直在遵循我上面提到的片段建议的方法。唯一的,改用 the snippet n. 942因为它是原始版本的改进版本。以下是它的工作原理:

假设您有一个模板(例如,'subtemplate.html'),大小不限,其中包含可以重复使用的有用 block :

     ........
<div id="results">
{% block results %}
{% for el in items %}
<li>{{el|capfirst}}</li>
{% endfor %}
{% endblock %}
</div><br />
........

通过在您的 View 文件中导入上面的代码片段,您可以轻松地引用模板中的任何 block 。一个很酷的特性是考虑了模板之间的继承关系,所以如果你引用一个包含另一个 block 的 block 等等,一切都应该正常工作。所以,ajax-view 看起来像这样:

from django.template import loader
# downloaded from djangosnippets.com[942]
from my_project.snippets.template import render_block_to_string

def ajax_view(request):
# some random context
context = Context({'items': range(100)})
# passing the template_name + block_name + context
return_str = render_block_to_string('standard/subtemplate.html', 'results', context)
return HttpResponse(return_str)

关于python - 在 Ajax 调用之后使用 Django 模板呈现 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/882215/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com