DataTableをHTML Webページで初期化し、Djangoバックエンドへのajax呼び出しによって区分的にレンダリングしました。DataTables次のボタンが機能しない
すべてがうまくいっていますが、[次へ]と[最後]のデータ可能なボタンは機能しません。改ページはうまく動作し、PrevとFirstも正常に動作します。
のDataTableコード:
var object_table = $('#object_table').DataTable({
"sDom": '<"H"lfr>t<ip>',
"sPaginationType": "full_numbers",
"iOverlayFade": 100,
"processing": true,
"serverSide": true,
"ajax": '/objects/object_list/',
"deferRender": true
"aoColumnDefs": [ { "aTargets": [ 0 ], "sWidth": "1%",
"searchable":false, "orderable":false, }
],
"columns": function (row, data, index) {... }]
});
そして、これは、ページネーションがエラーなしで正常に動作し、すべての負荷それはDataTableのAJAX呼び出しにジャンゴから渡されたように、コードがどのように見えるか
def dt_object_list_loader:
r_sequence = int(request.GET.get('draw', 0))
r_length = int(request.GET.get('length', 10))
r_start = int(request.GET.get('start', 0))
objects = djangomodel.objects.filter(...)
result_list = [objects[r_start:r_start + r_length]
response_data = {}
response_data['recordsTotal'] = len(result_list)
response_data['draw'] = int(request.GET.get('draw', 0))
response_data['data'] = result_list
return HttpResponse(jsonpickle.encode(response_data), content_type='application/json')
です。これはしていません(Pythonのエラーがスローされたときに
Internal Server Error: /home/task_list/
Traceback (most recent call last):
....
r_start = int(request.GET.get('start', 0))
ValueError: invalid literal for int() with base 10: 'NaN'
DataTableのも不可解なエラー7(一般的なAjaxのエラー)を発生させます。しかし、「最後の/次の」ぼやけている、と私はそれらをクリックすると、Djangoはエラーを発生させますエラーが発生したテーブル以外のものを提供してください。
次回または最後にクリックされたときに、datatables APIから提供されるr_start値がNaNであることがわかりました。私はいくつかの不器用なjqueryを実行することなく、どのボタンがクリックされたか(最後の範囲か、次の範囲)をdjangoから知る方法がありません。
このデータテーブルは、私のプログラムの別の部分からほぼ正確にコピーされ、うまくいきました。私はちょうど別のオブジェクトリストを吐くようにPythonコードを変更しました。
私の質問は、データ型をNaNを渡すだけでなく、次の/最後のボタンがぼやけているのを除いて、「次へ」にもっと有用な値を送るようにするにはどうすればいいですか?
私は実際にこのコード行を持っていましたが、コメントアウトされました。 しかし、この作業は、result_list(クエリーセット全体のチャンクのみを含む)だけでなく、すべての可能な結果の合計長を使用していました。 この例では、response_data ['recordsFiltered'] = objects.count()を使用しました。 これはうまくいきました。あなたがオブジェクトに変更することができれば、この答えはほとんど正しいです。count()私はそれを受け入れることができます。 – rob
@rob、私はPythonを知らないのですが、あなたの記述に基づいて、 'recordsFiltered'が見つからなかったとわかりました。 –
ありがとう、あなたは頭痛の数時間私を救った! – rob