在django做ajax的更好方法

Joe*_*oel 5 javascript python django ajax

前几天我为一直在研究的Django应用程序编写了一些AJAX.

我来自Ruby on Rails,所以我没有做过原始JS的方式.

因此,基于Rails的部分内容,我在某种伪代码中有类似于以下内容的内容,请不要赘述:

1)JS函数使用原型的Ajax.Updater('tablediv'是我想要更新Ajaxily的表的id,而url指向正确的django视图)

 function updateTable(){
       new Ajax.Updater('tablediv',url {params: params....etc
Run Code Online (Sandbox Code Playgroud)

2)django视图获取新数据以填充表:

 def ajaxTable
     objects = Objects.object.all...
     return render_to_response('ajaxtable.html',objects)
Run Code Online (Sandbox Code Playgroud)

3)ajaxtable.html只是一种"部分"的Rails,所以基本上是一张没有<table> </table>... 的表:

   <th>{{object.data}}</th>
   <td>{{object.moredata}}</td>
Run Code Online (Sandbox Code Playgroud)

所以我的实际问题:

这对我来说似乎很苛刻,我厌倦了在线搜索我想要的东西之后把它扔了.

这是它的方式吗?它工作正常,我只是不知道知道,你知道吗?

Ora*_*Box 5

这有点取决于我想要做什么.Ajax是从谷歌地图到简单的自动完成的各种各样的场景,其复杂性和最佳方法都非常多.

但是,有一些有用的东西你可以帮助.

1)模板级别

确保TEMPLATE_CONTEXT_PROCESSORS设置中有"django.core.context_processors.request".然后你可以这样做;

{% if not request.is_ajax %}
<html>
  <head>
  ...
  </head>
  <body>
  ...
{% endif %}
actual content
{% if not request.is_ajax %}
</body>
</html>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

基本上然后说这个页面是/ test /你可以做一个浏览器请求并通过JavaScript获取完整的内容或请求,然后获取内容.有一个博客帖子可以更详细地解释这一点,但我现在找不到它.

2)在视图中

在模板中,我们只是访问模板中的请求对象.在视图中,您可以执行非常类似的操作.

def my_view(request):
    if requst.is_ajax():
        # handle for Ajax requests

    # otherwise handle 'normal' requests
    return HttpResponse('Hello world')
Run Code Online (Sandbox Code Playgroud)

上面的方法实际上与您的方法不同,但允许您重复使用视图并更简洁地编写它.我真的不会说你在做什么是错的或者是hacky但你可以写它以使它更简洁并重复使用模板和视图.

比方说,你可以只有一个模板,如果它是一个Ajax请求,它只返回需要更新的部分.在您的情况下,它将是表视图.