Как отобразить несколько таблиц в одном представлении, используя django-tables2?

Использование djt2 v0.15 / dj1.6 / pyth2.6.6

djt2 doc Пример файла представлений для нескольких таблиц:

def people_listing(request) :

    config = RequestConfig(request)
    table1 = PeopleTable(Person.objects.all(), prefix="1-")
    table2 = PeopleTable(Person.objects.all(), prefix="2-")
    config.configure(table1)
    config.configure(table2)
    return render(request, "people_listing.html",
        {"table1": table1, "table2": table2})

Этот пример, во-первых, кажется неверным в отношении указанных параметров "table1", "table2". Мои тесты показывают, что имя определения people_list необходимо использовать в кавычках, по крайней мере, для одной таблицы. Кроме того, зачем кому-то показывать одну и ту же таблицу дважды? Это плохой пример? Вот мое приложение, пытающееся использовать эту структуру:

def AvLabVw(request):

    config = RequestConfig(request)
    cmutbl = CmuTable(CmuVersion.objects.all(), prefix="1-")
    simtbl = SimTable(Simulator.objects.all(), prefix="2-")
    config.configure(cmutbl)
    config.configure(simtbl)
    return render(request, "AvRelInfo.html", {"AvLabVw":cmutbl, "AvLabVw":simtbl})

Файл url забирает AvLabVw, а HTML-шаблон использует render_table.

{% render_table AvLabVw %}

Что происходит с этим кодом, так это то, что по-прежнему отображается только одна таблица, в зависимости от того, какая из них последняя в строке обратной визуализации.

В другом месте документа говорится, что нужно использовать SingleTableView с get_context_data, чего я еще не выяснил...

У меня есть попытка реализации этого стиля, я думаю, что ему нужен объект таблицы и объект списка?

views.py

из представлений импорта django_tables2
из django_tables2 импортировать SingleTableView
из django_tables2 импортировать SingleTableMixin
из django.shortcuts импорт рендеринга
из django_tables2   import RequestConfig

def SimVers_lst(запрос):

     return render(запрос, 'AvRelInfo.html', {'SimVers_lst': Simulator.objects.all()})

def AvLabVw(запрос):

    config = RequestConfig(запрос)
    simlst = SimVers_lst(Simulator.objects.all())
    таблица = CmuTable(CmuVersion.objects.all(), префикс ="1-")
    Stv = views.SingleTableView()
    multitbl = Stv.get_context_data()
    config.configure(multitbl)
    обратный рендер (запрос, "AvRelInfo.html", { "AvLabVw": multitbl })

в {% render_table AvLabVw %} в HTML шаблон с обычным универсальным"ValueError at /AvCtlapp/ Expected table or queryset, not 'str'."... получить мусор... Я думаю, я могу попытаться увидеть, что он получает в оболочке, если я могу настроить этот тест...

Спасибо за любую помощь...

Джо

PS: нужен ли пользовательский рендер, и как это будет выглядеть?

1 ответ

Ваш первый пример кода (он был скопирован из документации django-tables2) был предназначен для рендеринга двух таблиц на одной странице. Это неплохой пример (я думаю), потому что он показал, как отобразить 2 таблицы из одного и того же класса таблиц с одинаковым набором запросов с другим префиксом.

И последний пример кода из вашего вопроса, вы ошиблись насчет использования SingleTableView. Он предназначен для рендеринга одной таблицы в шаблоне, а в основном это представление на основе классов. Попробуйте вот так:

class AvLabVw(SingleTableView):
    model = Simulator
    template_name = 'AvRelInfo.html'
    table_class = SimulatorTable

и шаблон как:

{% load render_table from django_tables2 %}
{% render_table table %}

Теперь, если вы хотите визуализировать несколько таблиц, переопределите get_context_data() метод с этой точки зрения, как это:

class AvLabVw(SingleTableView):
    model = Simulator
    template_name = 'AvRelInfo.html'
    table_class = SimulatorTable


def get_context_data(self, **kwargs):
    context = super(AvLabVw, self).get_context_data(**kwargs)
    context['table_cmu'] =  CmuTable(CmuVersion.objects.all(), prefix="1-")
    return context

и шаблон как:

{% load render_table from django_tables2 %}
{% render_table table %}
{% render_table table_cmu %}

и URL:

url(r'^something/$', AvLabVw.as_view(), name='avlabvw'),
Другие вопросы по тегам