当前位置: 首页 > 面试题库 >

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

江宏深
2023-03-14
问题内容

我一直在尝试了解在Django中执行Ajax的最佳方法是什么。通过四处阅读,我了解到常见的过程是:

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

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

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

现在,我仍然不明白的是 Django模板如何与所有这些相关?
显然,我们根本没有利用模板的功能。理想情况下,我认为最好传回JSON对象和模板名称,以便可以迭代数据并创建HTML块。但也许我在这里完全错了…

我发现朝这个方向发展的唯一资源是此代码段(769),但我还没有尝试过。显然,在这种情况下将要发生的所有结果HTML是在服务器端创建的,然后传递给客户端。JavaScript回调函数只需要在正确的位置显示它。

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

非常感谢!

更新:请使用
代码片段942,
因为它是上述代码的增强版本!
我发现继承支持通过这种方式效果更好。


问题答案:

嘿,谢谢vikingosegundo!

我也喜欢使用装饰器:-)。但是与此同时,我一直在遵循我上面提到的摘录建议的方法。唯一的事情是使用代码段n。942因为它是原始版本的改进版本。运作方式如下:

想象一下,您有一个包含任意可重复使用的有用块的大小的模板(例如’subtemplate.html’):

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

通过在视图文件中导入以上代码段,您可以轻松引用模板中的任何块。一个很酷的功能是考虑了模板之间的继承关系,因此,如果您引用一个包含另一个块的块,依此类推,那么一切都应该可以正常工作。因此,ajax视图如下所示:

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)


 类似资料:
  • 问题内容: 我有一个表Product,该表显示一组产品的信息。 我正在使用下面的Ajax调用您更新表。 如何在我的Ajax调用中使用“结果”更新变量product_list? 这应该更新表吧? 谢谢 问题答案: 你不能这样。更好的方法是通过ajax加载html的那部分。 您的ajax视图: 您的主要html: table_body.html: 您的ajax看起来像这样: 你在这里使用这个load(

  • 问题内容: 我网站的主页顶部有多个按钮。只要按下这些按钮之一,就会将获取请求发送到django视图,该视图将被重定向,并过滤django模型的查询集并最终显示在网页上。我知道我的ajax可以正常工作,因为终端说请求已正确重定向。重定向到的功能似乎也很有效,因为它非常简单并且没有引发任何错误。但是,我的看法不变,我不确定为什么。 urls.py views.py 问题答案: 您不能在您的情况下使用D

  • 这是我的模板: 这是我的视图模板: 我得到的内容是html,我想在视图中显示,但我得到的只是原始html代码。如何呈现HTML?

  • 我是ReactJS的新手,我现在对组件生命周期方法的工作方式感到困惑;在我的例子中,这与ReactJS. org文档完全矛盾。预期的行为是在渲染()之前执行,但是渲染()在组件迪蒙()之前执行。 我的源代码: 类变量this.cache是如果被调用在,但它占用的值如果在中调用。

  • 问题内容: 我的一个实体中的一个字段是“ datetime”变量。 如何将该字段转换为字符串以在浏览器中呈现? 这是一个代码片段: 这是我的实体类中的变量: 这是我收到的错误消息: 呈现模板期间引发了异常(“可捕获的致命错误:DateTime类的对象无法在… \ app \ cache \ dev \ twig \ 9b \ ad \ 58fd3bb1517632badf1fdc7fa4a8.ph

  • 当我的模板包含一些JavaScript时,我遇到了一个问题。例如: 果然,模板解释器希望将双卷曲大括号{{}}中的所有内容解释为变量。现在我想知道是否有办法关闭类似于的此类行为。