【问题标题】:Django, datatables doesn't render table in html templateDjango,数据表不在 html 模板中呈现表
【发布时间】:2021-02-06 09:27:23
【问题描述】:

我将视图函数中的数据作为表格发送到模板,并尝试使用数据表将表格转换为功能更强大的表格,因此我可以根据不同的列对元素进行排序... 该表本身出现......但它只是一个 html 结构化表,而不是动态表,它可以按列排序。 我在关注:https://datatables.net/manual/

到目前为止,我发现建议: -- 检查表格的完整性(所以它有一个头部标签和身体标签)- 我有 --所有标签必须关闭 - 它们已关闭 -- 使用Javascript函数,像这样:

 $(document).ready( function () {
    $('#table_id').DataTable();
    } );

我不知道还有什么问题... 我不得不提...我想避免将数据保存到数据库,只是想从视图中获取数据并将其发布到模板中的表中...这就是我选择数据表而不是 django_tables2 的原因...因为它似乎数据表有一种方法只是从数据中呈现表...... 我的代码:

views.py:

 ...
    for Loop:
        ...
        data_list.append({'ref':ref[k], 'ref_num':ref_num[k], 'ref_pr':ref_pr[k]})
        k=k+1
    
    context={
        data_list,
    }

return render(request, 'objects.html', context=context)

页面已呈现,因此 url 中没有错误...

html页面:

{% extends "base_generic.html" %}
{% load static %}
{% block css %}
  <link rel="stylesheet" type="text/css" href="{% static 'css/styles.css' %}">
{% endblock %}
  <link rel="stylesheet" type="text/css" 
  href="https://cdn.datatables.net/1.10.23/css/jquery.dataTables.css">
  <script type="text/javascript" charset="utf8" 
  src="https://cdn.datatables.net/1.10.23/js/jquery.dataTables.js"></script>
{% block content %}
<div>
    <table id='table_id' class="display">
        <thead>
            <tr>
                <th>ref</th>
                <th>ref_num</th>
                <th>ref_pr</th>
            </tr>
        </thead>
        <tbody>
            {%for data in data_list%}
                <tr>
                    <td>{{data.ref}}</td>
                    <td>{{data.ref_num}}</td>
                    <td>{{data.ref_pr}}</td>
                </tr>
            {%endfor%}
        </tbody>
    </table>
    <link rel="stylesheet" type="text/css" 
        href="https://cdn.datatables.net/1.10.23/css/jquery.dataTables.css">
    <script type="text/javascript" charset="utf8" 
    src="https://cdn.datatables.net/1.10.23/js/jquery.dataTables.js"></script>
    <script>
        $(document).ready( function () {
        $('#table_id').dataTable();
        } );
    </script>
{% endblock %}

据我所知,一般原则是将所有脚本设置在页面下方,以便它们按顺序最后加载,因此页面加载速度会更快。但我试图在所有可能的地方设置脚本,在页面上方和一般页面中。它对我不起作用。从代码中也可以看出,我正在尝试使用 CDN 代码,指的是数据表的服务器。

也可能是因为我使用 for 循环来填充表格的数据,所以它不起作用?但我想我在数据表教程的某处看到了 for 循环?我应该在这里尝试什么、做额外的或修复什么?如果我需要发布额外的代码,请告诉我。谢谢。

可能需要进一步修改?但是在手册中说,在设置脚本后应该初始化表......

【问题讨论】:

  • 字典“data_list”中是否有数据
  • 这些来自哪里 ref[k],ref_num[k],ref_pr[k]
  • 是的,有数据。 html 加载了一个基本的 html 表。数据来自计算,我只是没有发布计算,所以不要用不必要的计算来超载问题。谢谢你。我会尝试按照您的解决方案...

标签: django datatables-1.10


【解决方案1】:

你也只需要加载 jQuery,看这个 sn-p:

  <script src="https://code.jquery.com/jquery-3.5.1.js"  crossorigin="anonymous"></script>
  <link rel="stylesheet" type="text/css" 
  href="https://cdn.datatables.net/1.10.23/css/jquery.dataTables.css">
  <script type="text/javascript" charset="utf8" 
  src="https://cdn.datatables.net/1.10.23/js/jquery.dataTables.js"></script>
    <table id='table_id' class="display">
        <thead>
            <tr>
                <th>ref</th>
                <th>ref_num</th>
                <th>ref_pr</th>
            </tr>
        </thead>
        <tbody>
                <tr>
                    <td>ref1</td>
                    <td>ref_num1</td>
                    <td>2</td>
                </tr>
                <tr>
                    <td>ref2</td>
                    <td>ref_num2</td>
                    <td>1</td>
                </tr>
        </tbody>
    </table>
    <script>
        $(document).ready( function () {
            $('#table_id').dataTable();
        } );
    </script>

【讨论】:

  • 我有一个问题......我在脚本中看到了一个完整性选项......这个完整性选项是专门与数据表相关的,还是项目的密钥。我现在对此感到困惑。
  • 现在正在搜索这个,我没有看到任何明确的信息......似乎专门针对数据表,因为它们都以“sha......”开头,但每个人都有不同的数字。 .. 我应该从哪里得到这个号码,或者只使用代码 sn-p 中的号码?很抱歉提出了额外的问题,我只是想完全理解...谢谢
  • @bugthefifth 只是证明cdn资源未经操纵的代码。在此处阅读更多信息:developer.mozilla.org/en-US/docs/Web/Security/…。但是,您不必一定要定义它。为避免混淆,我编辑了我的答案以删除该属性。如果这个答案解决了您的问题,那么您可以考虑接受它作为正确答案。
  • 是的,我会的...我正在尝试...谢谢!
猜你喜欢
  • 2015-07-20
  • 1970-01-01
  • 2014-11-16
  • 2020-02-05
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
  • 2018-08-14
  • 1970-01-01
相关资源
最近更新 更多