使用 django-tables2 时出错 - 应为 table 或查询集,而不是 'str'

Error Using django-tables2 - Expected table or queryset, not 'str'

我正在尝试使用 django-tables2 和 运行 为我的应用程序创建一些表,但遇到了一些困难。我正在使用 Python 2.7 和 Django 1.7。我正在按照教程进行操作,但我 运行 遇到了问题。

我到了需要创建 Table class 进行自定义的地步。但是,每当我这样做时,我都会收到以下错误:

Expected table or queryset, not 'str'.

完成 some research 后,我似乎使用的是旧版本的 django-tables2。但是,我昨天才使用 pip install django-tables2 安装它,并在半小时前更新了它。知道如何让 django-tables2 正常工作吗?

编辑 - 问题已解决。我使用的是 {% render_table people %} 而不是 {% render_table table %}

嗯,我认为你的问题不在于 django-tables2 的版本。在这里,我认为当您将变量从视图传递到模板时,您传递的是字符串而不是 queryset/table class 对象。对于工作示例:

Table class:

class SomeTable(tables.Table):

    class Meta:
        model= SomeModel
        attrs = {"class": "paleblue"}

查看Class:

class SomeTableView(SingleTableView):
    model = SomeModel
    template_name = 'test.html'
    table_class = SomeTable

模板:

 {% load render_table from django_tables2 %}
 {% render_table table %}   <!-- Here I am passing table class -->

或者您可以直接发送查询集来呈现 table,例如:

class SomeView(TemplateView):
     def get(self, request, *args, **kwargs):
         data = SomeModel.objects.all()
         context = self.get_context_data(**kwargs)
         context['table'] = data
         return self.render_to_response(context)

并像这样渲染它:

{% load render_table from django_tables2 %}
{% render_table table %} <!-- Here I am passing queryset -->

我也遇到了这个问题。您应该做的第一件事是检查您的更新:

sudo pip install django-tables2 --upgrade
sudo pip install django-tables2-reports --upgrade

升级也没有解决我的问题。
如果您已经升级了这些版本。你应该检查你的实现。如果您正在使用基于 Class 的视图并且您可能实现了视图、模板、table。您可能忘记了网址:

/* I give the example with respect to other post*/
urls.py  /*Same dic with table.py,models..etc*/

from .views import SomeTableView   
urlpatterns = patterns('',
                   url(r"^$", SomeTableView.as_view(), name="index"),

                   
                   )

如果它不是您网站的索引,您可能需要更改 r"^$"name="index"

有同样的问题。我忘记在视图的参数中添加SingleTableMixinclass

根据django-tables2 documentation
tutorial/views.py 中,class 名称是 PersonListView here

我将 class 名称从 PersonListView 更改为 PersonTableView 并且还在 urls.py.

中进行了此更改

这样做我的问题就解决了。

为什么会出现这个问题? 请任何人告诉我。