【问题标题】:How to render tables in django-datatable-view?如何在 django-datatable-view 中呈现表格?
【发布时间】:2016-12-30 01:28:06
【问题描述】:

我不知道如何使用Django-datatable-view 呈现可编辑表格。我想创建一个完全一样的表:例如http://django-datatable-view.appspot.com/x-editable-columns/ from model City

我已阅读文档和教程,但仍然不知道如何创建表格。

这是我到目前为止所做的:

{% extends "base.html" %}
{% block head %}
    {% load static %}e
    <link rel="stylesheet" href="https://cdn.datatables.net/1.10.12/css/dataTables.bootstrap.min.css">
    <script src="https://cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script>
    <script src="https://cdn.datatables.net/1.10.12/js/dataTables.bootstrap.min.js"></script>
    <script src="{% static "datatable/js/datatableview.min.js" %}"></script>
    <script>
        datatableview.auto_initialize = false;
        $(function () {
            var xeditable_options = {};
            datatableview.initialize($('.datatable'), {
                fnRowCallback: datatableview.make_xeditable(xeditable_options),
            });
        })
    </script>
{% endblock %}
{% block content %}
    {{ datatable }}
    {{ object_list }}
{% endblock %}

而我的看法是:

class ZeroConfigurationDatatableView(dtv_views.XEditableDatatableView):
    model = dolava_models.City

    datatable_options = {
        'columns': [
            'id',
            ("Name", 'name', dtv_helpers.make_xeditable),
            ("Country", 'country', dtv_helpers.make_xeditable),

        ]
    }

不幸的是我的代码呈现了这个:

【问题讨论】:

  • 你还没有定义表格标签。
  • @UsmanMaqbool 如果您知道如何定义标签,您可以发布答案。我不知道你说的标签是什么意思。
  • @UsmanMaqbool 你能解释一下你所说的表格标签是什么意思吗?你的意思是html表格标签吗?

标签: python django datatable html-table


【解决方案1】:

作为第一步,尝试运行埋在下面的示例项目:

django-datatable-view/datatableview/tests/example_project/example_project/example_app

为此,请遵循项目 github 页面上的 Documentation and Live Demos,但请务必在开始之前将 django&gt;=1.4 替换为 django==1.8。也就是说,根据我的经验,它与 django1.9 或 1.10 不兼容。

完成此操作后,您将拥有一套完整的工作示例和匹配的文档,这将使事情变得简单一些。您提供的链接已过期。探索示例 (example_app/views.py) 和文档。

当您准备好退出沙盒时,请遵循以下路线:

  1. 启动一个新的虚拟环境

  2. 克隆此分支:https://github.com/jangeador/django-datatable-view/(它还有一些提交使其与最新版本的 django 兼容)和 pip install(如果您打算进行更改,请使用 -e 可编辑选项)。

  3. 从您运行的示例应用程序中遵循此示例Datatable object and Meta。在代码中:

    class MyDatatable(Datatable):
        class Meta:
            model = Entry
            columns = ['id', 'headline', 'pub_date', 'n_comments', 'n_pingbacks']
            ordering = ['-id']
            page_length = 5
            search_fields = ['blog__name']
            unsortable_columns = ['n_comments']
            hidden_columns = ['n_pingbacks']
            structure_template = 'datatableview/default_structure.html'
    
    class ConfigureDatatableObjectDatatableView(DatatableView):
        model = Entry
        datatable_class = MyDatatable
    

如果不需要,可以删除Datatable 类中的所有属性(它们是可选的)。

除了文档之外,我还必须在 DataTableView 类上重写以下方法以使其工作。

def get_template_names(self):
    return "example_base.html"

这是你的模板文件,需要包含:

<script src="{% static 'path-to/datatables.min.js' %}" type="text/javascript"></script>
<link href="{% static 'your-path-to/datatables.min.css' %}" rel="stylesheet">

<script type="text/javascript" src="{% static 'js/datatableview.js' %}"></script>

{{ datatable }}

<script>
    // Page javascript
    datatableview.auto_initialize = true;
</script>

这里值得注意的是包含来自 django-datatable-view 模块的datatableview.js(以及随附的datatableview.auto_initialize = true;)。如果您从一开始就对 datatables.js 感到满意,您可以继续自己配置它,但鉴于您也是 django-datatable-view 的新手,这可能是最简单的方法。

【讨论】:

  • 我已经尝试过了,但我仍然只是得到一个查询集对象的列表。这会为您呈现一张桌子吗?
  • @Jed:是的,确实如此。对我来说,它分两个步骤工作:1)常规页面加载呈现一个空表,2)由 1 发出的填充表的 ajax 请求。如果您只获取对象,请检查请求是否为 Ajax。
【解决方案2】:

如果你认为你需要这个函数来根据你的需要呈现自定义列

    def render_column(self, row, column):
            # We want to render user as a custom column
            if column == 'user':
              # escape HTML for security reasons
              return escape('{0} {1}'.format(row.customer_firstname, 
              row.customer_lastname))
           else:
             return super(OrderListJson, self).render_column(row, column)

【讨论】:

    【解决方案3】:
    {% block content %}
        {% if instances %}
            <table class='datatable'>
                <tr>
                  <th>ID</th>
                  <th>Name</th>
                  <th>Country</th>
                </tr>
                {% for row in instances %}
                    <tr>
                      <th> {{ row.id }}</th>
                      <th> {{ row.name }}</th>
                      <th> {{ row.country }}</th>
                    </tr> 
                {% endfor %}
            </table>
        {% else %}
            <p>No data available</p>
        {% endif %}
    {% endblock %}
    

    【讨论】:

    • 问宁渲染表在django-datatable-view
    • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation would greatly improve its long-term value 通过展示为什么这是一个很好的解决问题的方法,并将使其对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。
    猜你喜欢
    • 2014-08-29
    • 2018-08-31
    • 2020-03-11
    • 2019-07-11
    • 2022-01-03
    • 2010-10-31
    • 1970-01-01
    • 2015-10-22
    • 2022-10-14
    相关资源
    最近更新 更多