Django TemplateView中的分页

时间:2017-06-28 20:53:55

标签: django

我有一个模板,我想显示一个大的数据列表,(从外部API而不是数据库接收)。

虽然我知道这很容易就是ListView,但是因为我不是从数据库中提取数据,所以TemplateView似乎是最好的选择,但是显示数据列表和分页的最佳方法是什么?

目前我有: 图

class QuotesResultsView(TemplateView):
    template_name = 'site/quotes.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['quotes'] = self.request.session['quotes']['data']
        return context

模板:

...

        <div class="about">

          {% for quote in quotes %}
            <h3>Supplier:{{ quote.supplierName }}</h3>
              <div>
              <p>Annual Cost: {{ quote.newSpend }}</p>
              <p>Savings: {{ quote.newSavings }}</p>
            </div>
            <button class="btn btn-cta-primary">Proceed</button>
          {% endfor %}
        </div><!--//about-->

1 个答案:

答案 0 :(得分:2)

您仍然可以继承ListView并覆盖get_queryset()方法,该方法必须返回一个iterable。这将使您能够通常使用分页

class QuotesResultsView(ListView):
    template_name = 'site/quotes.html'
    paginate_by = settings.QUOTES_PER_PAGE
    context_object_name = 'quotes'

    def get_queryset(self):
        # Looks like your data is already an iterable
        # if not convert it to iterable and return
        return self.request.session['quotes']['data']

不要忘记在您的设置中设置QUOTES_PER_PAGE并将其导入您的views.py

然后在模板中,您可以使用docs中的标准分页代码段。