Django 模板:如何自动刷新 jQuery 数据表?

Posted

技术标签:

【中文标题】Django 模板:如何自动刷新 jQuery 数据表?【英文标题】:Django template : how to auto-refresh a jQuery Datatables? 【发布时间】:2015-09-29 06:11:33 【问题描述】:

我是一个新的 Django 用户,遇到了一个问题。我想自动刷新我的 jQuery Datatables 数据,显示我的新数据库内容,而无需重新加载整个 html 页面(使用 ajax 请求)。我浏览了很多帖子,但没有找到我的graal...

这是我的 Django 模板.html:

% block js % 
<script type="text/javascript" language="javascript" class="init">
  $(document).ready(function()
  var oTable = $('#db_name').DataTable();
   );

  setInterval(function () 
      oTable.ajax.reload();
  , 2000 );
 );

</script> 
% endblock %

我的views.py:

def db_update(request):
    watch_files()
    all_ = db.objects.all()
    return render_to_response('supervision.html', 'all_fields': all_)

问题是每 2 秒显示一条错误消息“数据表警告:表 id=db_name - 无效 JSON 响应”。我认为这是正常的,因为没有 JSON。尽管有这个错误,但重新加载是有效的:如果我手动刷新 (F5),我的数据库中添加的所有新数据(函数 watch_files 在其中创建条目)都会很好地显示在我的页面中。 对我来说,理想的情况是获得透明的数据自动刷新,保留 Datatables 数组的当前排序/页面选项。

我也试过这个,试图通过 JSON,但没有成功:

$(document).ready(function() 
  var oTable = $('#db_name').DataTable( 
      ajax: obj_as_json
   ); 

  setInterval(function () 
      /* oTable.ajax.reload(); */
      oTable.fnReloadAjax();
      /* oTable.fnDraw(); */
  , 2000 );
 );

def db_update(request):
    watch_files()
    all_ = db.objects.all()
    jsondata = serializers.serialize('json', all_)
    return render_to_response('supervision.html', 
        'obj_as_json':json.dumps(jsondata), 
        'all_fields': all_)

如果有人可以帮助我,那就太好了。 谢谢,克里斯托夫

【问题讨论】:

Creating a JSON response using Django and Python 的可能重复项 【参考方案1】:

render_to_response('supervision.html') 总是返回由supervision.html 模板生成的html 内容。

您需要返回 JsonResponse 对象,该对象仅包含 json 数据。

from django.http import JsonResponse
def db_update(request):
    watch_files()
    all_ = db.objects.all()
    if request.is_ajax():
        jsondata = serializers.serialize('json', all_)
        return JsonResponse(jsondata)
    else:
        return render_to_response('supervision.html', 
            'all_fields': all_)

此外,您需要将 all_ 变量转换为数据表所期望的样子


   "data": [
      [ "column1_val",
        "column2_val",
         ...
      ],
    ]

我建议你看看https://github.com/pivotal-energy-solutions/django-datatable-view implementation

【讨论】:

谢谢你的回答,我会试试这个方法!!

以上是关于Django 模板:如何自动刷新 jQuery 数据表?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Django、Ajax、jQuery 在不刷新页面的情况下提交表单?

在使用模板系统时在 Django 中使用 JQuery 刷新 div

如何使用Django模板在javascript中访问ajax jquery中的模板变量

如何在Django中通过jQuery跟踪模板中自动生成的HTML元素的点击事件

如何在Django中自动刷新/重定向视图[重复]

使用 jquery、ajax 和 django 定期刷新页面