如何从Ajax()获取值到Django模板中?

Mur*_*ala 1 python django ajax jquery

我有一个Django模板,其中显示了从数据库接收的多个值,并将其传递给模板,如下所示:

在views.py中

def test1(requests):
  requests.get...
  requests.get...
  requests.get...
  someQuery = "select id from table;"
  executeQ(someQuery)
  someQuery = "select id from table;"
  executeQ(someQuery)
  someQuery = "select id from table;"
  executeQ(someQuery)
  context = Data1, Data2, Data3
  return render_to_response('test1/index.html', context)
Run Code Online (Sandbox Code Playgroud)

在template / test1 / index.html中

<html>
  ...... 

<table>
<th> header1 </th>
<th> header2 </th>
<th> header3 </th>

{% for row in context %}
 <td> row.1 </td>   
 <td> row.2 </td>
 <td> row.3 </td>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

现在,我要通过Ajax更新那些row.1,row.2,row.3,而不必每次都重新分配页面。数据来自数据库。那么我在哪里以及如何放置一些Ajax()来实现Django?

dan*_*som 5

除了服务器端代码(Python)外,您还需要添加一些客户端代码(JavaScript)。

一种常见的方法是使用jQuery ajax()方法将ajax请求发送到服务器,使用django应用程序处理此请求,将响应发送回客户端,然后操作DOM。

因此,您的客户端代码需要

  • XMLHttpRequest发送到服务器(通常使用$.ajax()
  • 如果请求成功,则修改DOM(通常在$.ajax()成功回调函数内部)
  • 你可以通过循环访问在JSON响应创建由表行所需要的标记数据做到这一点,然后更换上一行与使用JavaScript / jQuery的这个新的标记(如图所示这里

而且您的Django应用程序需要

  • 网址分配器中的网址格式匹配
  • 在关联的视图中查询数据库
  • 将返回的数据序列化为JSON(您可以使用python JSON模块)
  • 通过返回此JSON HttpResponse此SO问题讨论JSON和HttpResponses)

我还建议您阅读有关使用django和ajax的出色答案(包括jQuery $.ajax()方法的示例)。

还值得一提的是,您不必在ajax步骤中使用jQuery- 您可以使用纯JavaScript生成Ajax请求 -但这是一种流行的方法,并且非常用户友好。