使用django-tables2时出错 - 预期的表或查询集,而不是'str'

时间:2015-04-16 18:38:02

标签: python-2.7 django-1.7 django-tables2

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

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

  

预期的表格或查询集,而不是' str'。

执行some research后,我看起来正在使用旧版本的django-tables2。但是,我昨天使用pip install django-tables2安装了它,并在半小时前更新了它。知道我怎么能让django-tables2正常工作吗?

编辑 - 问题已解决。我使用{% render_table people %}代替{% render_table table %}

4 个答案:

答案 0 :(得分:6)

我也遇到了这个问题。您应该做的第一件事是检查您的更新 sudo pip install django-tables2 --upgrade
sudo pip install django-tables2-reports --upgrade
升级也没有解决我的问题 如果您已经升级了这些版本。您应该检查您的实施。如果您使用的是基于类的视图,并且您非常确定实现了视图,模板,表。你必须忘记网址 所以网址应该是这样的。

/* 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"

答案 1 :(得分:4)

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

表类:

class SomeTable(tables.Table):

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

查看课程:

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 -->

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

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 -->

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

我将班级名称从 PersonListView 更改为 PersonTableView 并且还在 urls.py 中进行了此更改。

通过这样做,我的问题得到了解决。

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