2015-04-16 11 views
6

Ich versuche, einige Tabellen für meine Anwendung mit django-tables2 zu erstellen und in einigen Schwierigkeiten zu laufen. Ich benutze Python 2.7 und Django 1.7. Ich folge dem Tutorial, und ich stieß auf Probleme.Fehler bei der Verwendung von django-tables2 - Erwartete Tabelle oder Queryset, nicht 'str'

Ich erreiche den Punkt, wo ich eine Tabelle Klasse für die Anpassung erstellen muss. Jedes Mal, wenn ich so tun, bekomme ich folgende Fehlermeldung:

Expected table or queryset, not 'str'.

Nachdem ich someresearch es sieht aus wie ich eine ältere Version von django-tables2 verwenden. Allerdings habe ich es gerade gestern mit pip install django-tables2 installiert und vor einer halben Stunde aktualisiert. Irgendeine Idee, wie ich django-tables2 richtig arbeiten lassen kann?

EDIT - Problem gelöst. Ich benutzte {% render_table people %} anstelle von {% render_table table %}

Antwort

4

traf ich dieses Problem auch. Das erste, was Sie tun sollten, ist Ihre Updates zu überprüfen.
sudo pip installieren django-tables2 --upgrade
sudo pip installieren django-tables2-reports --upgrade
Upgrades funktionierte nicht mein Problem auch.
Wenn Sie diese Version bereits aktualisiert haben. Sie sollten Ihre Implementierung überprüfen. Wenn Sie die klassenbasierte Ansicht verwenden, sind Sie ziemlich sicher, dass Sie die Ansicht, die Vorlage und die Tabelle implementieren. Sie müssen wahrscheinlich die URLs vergessen.
So urls sollte so aussehen.

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


        ) 

Wenn es nicht Index Ihrer Website müssen Sie wahrscheinlich die r ändern "^ $" und name = "index"

3

Nun, ich denke, dein Problem ist nicht mit der Version von Django-Tabellen2. Hier denke ich, wenn Sie eine Variable von Ansicht zu Vorlage übergeben, übergeben Sie eine Zeichenfolge anstelle eines Objekts Abfrage/Tabelle Klasse. Für Arbeitsbeispiel:

Tabellenklasse:

class SomeTable(tables.Table): 

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

Ansicht Klasse:

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

Vorlage:

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

Oder Sie können die Tabelle zu machen, wie direkt eine queryset senden:

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) 

und es so machen:

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

Dies ist die beste Antwort. –