【问题标题】:Paginating a context inside a DetailView in Django在 Django 的 DetailView 中对上下文进行分页
【发布时间】:2019-04-28 23:50:31
【问题描述】:

我有一个资产详细信息视图,它使用来自另外两个模型(租户和服务)的数据。

asset\views.py

class AssetMultipleDetailView(LoginRequiredMixin, UserPassesTestMixin, DetailView):
    model = Asset
    context_object_name = 'asset'
    template_name = 'asset/asset_multiple_detail.html'

    def test_func(self):
        asset_multiple = self.get_object()
        if self.request.user == asset_multiple.owner:
            return True
        return False

    def get_context_data(self, **kwargs):
        context = super(AssetMultipleDetailView, self).get_context_data(**kwargs)
        context['tenants'] = Tenant.objects.filter(asset=context['asset']).order_by('created')
        context['services'] = Service.objects.filter(asset=context['asset']).order_by('created')
        return context

我想对 context['tenants]context['services'] 中的数据进行分页,但我不知道如何实现。 p>

我已经使用 paginated_by 在他们自己的 ListViews 中完成了这项工作,并且没有任何问题。

我只是想知道如何在 DetailView 中对上下文进行分页。

提前谢谢你。

【问题讨论】:

  • 谢谢混合。我之前看过那个。但它指的是Partner DetailView中的Partner模型。就我而言,我指的是 Asset DetailView 中的租户和服务模型。
  • DataTables 使分页变得尽可能简单。在任何类型的 HTML 表格上。

标签: python django django-class-based-views


【解决方案1】:

您可以按照django's example 中提供的示例将分页放入视图中。像这样:

class AssetMultipleDetailView(LoginRequiredMixin, UserPassesTestMixin, DetailView):
    ...

    def get_context_data(self, **kwargs):
        context = super(AssetMultipleDetailView, self).get_context_data(**kwargs)
        page = request.GET.get('page')
        tenants = paginator = Paginator(Tenant.objects.filter(asset=self.get_object()).order_by('created'), 5)  # will show 5 items in one page
        services = Paginator(Service.objects.filter(asset=self.get_object()).order_by('created'), 5)
        context['tenants'] = tenants.get_page(page)
        context['services'] = services.get_page(page)
        return context

然后像这样更新模板:

// tenants pages
<div class="pagination">
    <span class="step-links">
        {% if tenants.has_previous %}
            <a href="?page=1">&laquo; first</a>
            <a href="?page={{ tenants.previous_page_number }}">previous</a>
        {% endif %}

        <span class="current">
            Page {{ tenants.number }} of {{ tenants.paginator.num_pages }}.
        </span>

        {% if tennats.has_next %}
            <a href="?page={{ tenants.next_page_number }}">next</a>
            <a href="?page={{ tenants.paginator.num_pages }}">last &raquo;</a>
        {% endif %}
    </span>
</div>

// services
<div class="pagination">
    <span class="step-links">
        {% if services.has_previous %}
            <a href="?page=1">&laquo; first</a>
            <a href="?page={{ services.previous_page_number }}">previous</a>
        {% endif %}

        <span class="current">
            Page {{ services.number }} of {{ services.paginator.num_pages }}.
        </span>

        {% if services.has_next %}
            <a href="?page={{ services.next_page_number }}">next</a>
            <a href="?page={{ services.paginator.num_pages }}">last &raquo;</a>
        {% endif %}
    </span>
</div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 2014-10-23
    • 2019-03-02
    • 2012-04-09
    • 2020-12-19
    • 1970-01-01
    相关资源
    最近更新 更多