2015-04-16 6 views
6

Sto provando a creare alcune tabelle per la mia applicazione usando django-tables2 e incontrando alcune difficoltà. Sto usando Python 2.7 e Django 1.7. Sto seguendo il tutorial e mi sono imbattuto in problemi.Errore nell'uso di django-tables2 - Tabella prevista o queryset, non 'str'

Raggiunto il punto in cui ho bisogno di creare una classe Tabella per la personalizzazione. Tuttavia, ogni volta che lo faccio, ottengo il seguente errore:

Expected table or queryset, not 'str'.

Dopo aver fatto someresearch sembra che io sto usando una versione precedente di django-tables2. Tuttavia, l'ho appena installato ieri usando pip install django-tables2 e aggiornato mezz'ora fa. Qualche idea su come posso far funzionare django-tables2?

MODIFICA - Problema risolto. Stavo usando {% render_table people %} invece di {% render_table table %}

risposta

4

ho incontrato questo problema, anche. La prima cosa che dovresti fare è controllare i tuoi aggiornamenti.
sudo pip installa django-tables2 --upgrade
sudo pip installa django-tables2-reports --upgrade
Gli aggiornamenti non hanno funzionato anche il mio problema.
Se è già stata aggiornata la versione di questi. Dovresti controllare la tua implementazione. Se si utilizza la visualizzazione basata sulla classe e si è abbastanza sicuri di implementare la vista, il modello, la tabella. Probabilmente devi dimenticare gli URL.
Quindi gli URL dovrebbero apparire così.

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


        ) 

Se non è indice del tuo sito web è necessario cambiare probabilmente la r "^ $" e name = "index"

3

Beh, penso che il tuo problema non sia con la versione di django-tables2. Qui penso che quando passi una variabile da view a template, passi una stringa invece di un oggetto classe queryset/table. Ad esempio funzionante:

classe Tabella:

class SomeTable(tables.Table): 

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

Vista Classe:

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

Template:

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

Oppure è possibile inviare direttamente un set di query per rendere la tavola come:

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) 

e rendere in questo modo:

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

Questa è la risposta migliore. –

Problemi correlati