我正在使用django表2并尝试按照官方文档导出我的表

时间:2017-11-23 08:07:08

标签: python django django-models django-templates

我已经按照django表格2的官方文档进行了操作但是它不起作用我不知道为什么

views.py

from django.shortcuts import render
from django_tables2 import RequestConfig
from django.template.response import TemplateResponse
from .models import Customer
from .tables import CustomerTable
from .tables import TableView
from django_tables2.export.export import TableExport

def user_profile(request):

    table= CustomerTable(Customer.objects.all())
    RequestConfig(request,paginate={'per_page':15}).configure(table)

    return render(request, 'home.html', {'table': table})


def TableView(request):
    table = CustomerTable(Customer.objects.all())

    RequestConfig(request).configure(table)

    export_format = request.GET.get('_export', None)
    if TableExport.is_valid_format(export_format):
        exporter = TableExport(export_format, table)
        return exporter.response('table.{}'.format(export_format))

    return render(request, 'table.html', {
        'table': table
    })

我的html模板

{% extends 'base.html' %}
{% block content %}





{% load render_table from django_tables2 %}
{% load querystring from django_tables2 %}




<!doctype html>
<html>
<head>
    <title>List of Customers</title>

</head>
<body>

    {% querystring '_export'='csv' %}home

    {% for format in table.export_formats %}
<a href="{% querystring '_export'=format %}">
    download  <code>.{{ format }}</code>
</a>
    {% endfor %}

    <p margin-bottom:500px;>  </p>

    <div style="width: 2500px; height: 600px; overflow-y: scroll;">
        <div id ="users">
            <input class="search" placeholder="Search" />



    {% render_table table %}
    {% endblock %}
    </div>
    </div>

</body>

urls.py

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', user_profile, name="user_profile"),
    url(r'^$', TableView, name="TableView"),

]

tables.py

import django_tables2 as tables
from .models import Customer
from django_tables2.export.views import ExportMixin

from .models import Customer

class CustomerTable(tables.Table):
    class Meta:
        model = Customer
        template = 'django_tables2/bootstrap.html'

class TableView(ExportMixin, tables.SingleTableView):
    table_class = CustomerTable
    model = Customer
    template_name = 'django_tables2/bootstrap.html'

我觉得我定义urls.py的方式有问题,但我无法弄清楚出了什么问题

2 个答案:

答案 0 :(得分:1)

有一条说明in the documentation on exporting说:

  

此示例假定您在属性export_formats中的表实例上定义可能的导出格式列表。

因此,您需要将所需的导出格式添加到表格列表中,如下所示:

class CustomerTable(tables.Table):
    export_formats = ['csv', 'xls']

    class Meta:
        model = Customer
        template = 'django_tables2/bootstrap.html'

如果您愿意,还可以在模板的上下文变量中定义列表。没有权利&#39;在这。

答案 1 :(得分:-1)

所以我也把头撞在了墙上一点点,然后在一个清晰的时刻它击中了我,你需要在模板文件中包装这样的查询字符串标签

<a href="{% querystring '_export'='csv' %}"> download as csv</a>