【问题标题】:Django datatables load ajax data loadDjango 数据表加载 ajax 数据加载
【发布时间】:2014-11-16 11:29:06
【问题描述】:

可能我还不明白 urls.py 是如何工作的……但我不知道如何使用数据表的“bServerSide”加载数据……我认为我的 urls.py 有问题.我使用 Django,datatables.js,这是我的代码:

main.html

<table cellpadding="0" cellspacing="0" border="0" id="example1">
    <thead>
        <tr><th>Name</th></tr>
    </thead>
    <tbody></tbody>
</table>

<script type="text/javascript" language="javascript" class="init">
     $(document).ready(function() {
         $('#example1').dataTable( {                 
             "bServerSide": true,
             "sAjaxSource": "main.html/getdata_json",
             "bProcessing": true,
         } );
     } );
 </script>

views.py

def myajaxview(request):
   report = []
   start = request.GET['iDisplayStart']
   length = request.GET['iDisplayLength']    
   query = name.objects.all() #or any kind of queryset       
   query = query[start:start+length]
   for q in query:
      report.append(json.dumps(q.nome_struttura))    
   json = json.dumps(report)
   return HttpResponse(json, content_type='application/json')

urls.py

  urlpatterns = i18n_patterns('',
      ...
      url(r'^getdata_json$', 'views.myajaxview'),
      ... 

我不知道错误在哪里。你能帮我吗?

【问题讨论】:

  • 为什么你的 sAjaxSource 值中有“main.html”?
  • 因为如果我不在 sAjaxSource 中放入“main.html”,我会得到“找不到页面 (404)”。

标签: jquery python ajax django datatable


【解决方案1】:

你应该尽量避免在多个地方写url(遵循DRY原则),你可以给一个name to your url,像这样:

url(r'^getdata_json$', 'views.myajaxview', name='getdata_json')

然后在 HTML 中使用 Django 内置模板标签 url 来检索视图 url:

<table cellpadding="0" cellspacing="0" border="0" id="example1"
    data-url="{% url 'getdata_json' %}">

然后在 JS 中你可以使用 jQuery data 方法来检索 URL(而不是硬编码它):

<script type="text/javascript" language="javascript" class="init">
 $(document).ready(function() {
     $('#example1').dataTable( {                 
         "bServerSide": true,
         "sAjaxSource": $(this).data('url'),
         "bProcessing": true,
     } );
 } );
 </script>

作为旁注,您可以将 q.nome_struttura 附加到您的 report 数组中,在最终数组上使用 json.dumps,如下所示:

for q in query:
    report.append(q.nome_struttura)
json = json.dumps(report)

一般来说,当您使用 AJAX 请求时,您应该使用浏览器开发工具(例如 Firebug for Firefox 或 Chrome 开发工具)来准确查看传递给服务器的数据以及响应的方式。

为了您的信息,有一个 third party Django app 完全适合您的用例:即将 Django 与 jQuery Datatables 与服务器端处理集成。

【讨论】:

  • 感谢您的回复,但我找不到任何页面.. $(this).data('url') in undefined.
  • 我替换了 $(this).data('url') width {% url 'getdata_json' %} 我得到了数据!我现在如何在表格中显示数据?
猜你喜欢
  • 2017-09-17
  • 1970-01-01
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-19
  • 2012-03-21
相关资源
最近更新 更多